.writerow()csv返回一个数字而不是写行

时间:2012-10-07 15:41:41

标签: python csv python-3.x

我正在使用Python 3测试一些非常简单的代码。出于某种原因,下面的代码生成一个空输出,而不是写一行

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

1 个答案:

答案 0 :(得分:8)

writerow实际上会写行,但由于文件缓冲,您在eggs.csv中看不到它们。要查看文件中的内容,请关闭它或调用.flush()方法。如果使用with - 语句,则即使出现错误,文件也会自动关闭。

没有记录(report a bug?),但writerow返回fileobj.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