我正在使用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
答案 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