2014-02-25 78 views
-1

我想創建一個需要數輸出編碼,並創建一個生成與該號碼的文本文件 ,然後在使用着的許多文件寫一些行..在寫入文件時,獲取'TypeError,沒有足夠的格式字符串參數'?

我試圖用代碼:

for i in Nums: 
    sh1 = '%d.txt' %i 
    target = open (sh1, 'w') ## a will append, w will over-write 
    text = '%d * 0\n %d *1' 
    target.write(text %(i)) 
    target.close() 

但我面對這個錯誤TypeError:沒有足夠的格式字符串參數。 我不明白這個錯誤爲什麼顯示給我。我搜索了但解決方案沒有與我的代碼工作。

我需要的代碼是創建文本文件就像我輸入數字1一樣。創建txt文件名稱1.txt並將這些行寫入它。

1 * 0 
    1 * 1 
    1 * 2 
    1 * 3 

任何幫助? 在此先感謝

+2

提示:[第一](http://stackoverflow.com/questions/11146190/python-typeerror-not-enough-arguments-for-format-string)搜索結果實際上是有幫助的。 – keyser

回答

1

問題是與表達

text %(i) 

text指的是格式字符串'%d * 0\n %d *1',其中包含兩個%d佔位符,但你只傳一個參數,i。你需要做的是這樣

text % (i, j) 

例如,text % (4, 5)會給你

4 * 0\n 5 *1 

順便說一句,它是標準的前後都將用於格式化的%操作後,包括空格。如果你只傳遞一個參數到一個格式化操作,並且你想使用一個元組,你需要使用像(i,)這樣的語法,而不僅僅是(i)。你可以閱讀更多關於該規則here

+0

我的意思是我需要通過所有操作的參數,我試圖使用逗號,但同樣的問題發生? – abualameer94

1

爲什麼不使用str.format

for i in Nums: 
    target = open('{}.txt'.format(i), 'w') 
    target.write('{0} * 0\n{0} * 1\n{0} * 2\n{0} * 3\n'.format(i)) 
    target.close() 

使用'%d.txt' %i字符串格式的慢慢變得比較少用,可能是由於稍微的混亂可用性。 str.format更簡潔一點,並提供了相同的功能。你只需要指定{}來表示參數的去向。您可以進一步指定括號內的參數索引{0}{1}

+0

謝謝,它的工作.. – abualameer94

+0

對不起,但我不知道這個功能 – abualameer94

相關問題