2012-10-07 70 views
3

我測試使用Python 3.一些非常簡單的代碼,出於某種原因,下面的代碼生成的,而不是寫一行空輸出,.writerow()返回CSV數字代替文字行

import csv 

output = open('hello world.csv', 'w',newline='') 
wr = csv.writer(output, quoting=csv.QUOTE_ALL) 

wr.writerow('hello world') 

如果我在解釋器中嘗試命令,.writerow()會返回一個數字。下面的例子是在documentation page使用的一個:

>> import csv 
>>> spamWriter = csv.writer(open('eggs.csv', 'w', newline=''), delimiter=' ', 
... quotechar='|', quoting=csv.QUOTE_MINIMAL) 
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans']) 
40 
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam']) 
37 

回答

7

writerow實際寫入行,但你沒有看到他們在eggs.csv因爲文件緩衝。要查看文件中的某些內容,請致電.flush()方法。如果您使用with -statement,則即使存在錯誤,文件也會自動關閉。

它未記錄(report a bug?),但writerowfileobj.write()返回方法即寫入到在這種情況下一個文件的字符數的結果。

你應該通過形成一排writerow方法字段的順序:

writer.writerow(['field 1', 'field 2', 'etc']) 

如果傳遞一個字符串,而不是一個名單,然後在字符串被解釋爲字段的序列,其中每個字段是一個單個字符:

#XXX this is probably not what you want, don't do it 
writer.writerow('abc') 
# -> a,b,c 
+0

當使用'writer.writerow(list)'時可以抑制'字符數'的返回嗎?我想知道這個,因爲如果它是一個大文件,python終端會被填入數字。有關這個的任何想法? – bioinfoboy

+2

@bioinfoboy:壓制輸出,賦值給一個虛擬變量:'_ = writer.writerow(row)'' – jfs