Python - 使用csv写入器后csv文件为空
我是一名Python新手。最近我在一个较大的程序中遇到写入csv文件的问题,所以决定从基础开始排查一下。
我运行了Python官方文档中关于csv读写的一个示例代码:
import csv
spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ', quotechar='|')
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
当我去我的工作目录,点击“eggs.csv”文件时,发现这个文件是空的,显示为“0 kb”。在我的大程序中也出现了同样的情况(生成了空的csv文件)。我是不是漏掉了什么明显的东西?
谢谢!
编辑:
我刚刚尝试修改了代码为:
import csv
csvOut=open("eggs.csv", "wb")
spamWriter = csv.writer(csvOut, delimiter=' ', quotechar='|')
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
csvOut.close()
这样就成功了。我不太明白为什么第一个代码对我不起作用。
5 个回答
0
这段代码是可以用的。你确定你的操作系统没有把CSV文件的大小向下舍入吗?毕竟,文件大小可能就差几字节!
你可以试试 print(open("eggs.csv").read())
来查看这个文件是否真的为空,或者在命令行输入 more eggs.csv
来查看文件内容。
4
这可能来得有点晚,但我还没看到其他地方提到过的一个解决办法是使用 with
和 as
。在这种情况下,它可能看起来像这样:
import csv
with csv.writer(open('eggs.csv', 'w'), delimiter=' ', quotechar='|') as spamWriter:
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
我以前用过这个,没遇到过问题。
15
我对csv
模块不是很熟悉,但我觉得这更像是文件输入输出的问题,而不是csv
的问题。
你在文件里看不到内容的原因是因为Python还没有关闭这个文件。你需要把它关闭。
所以,不要这样做:
spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ', quotechar='|')
而是这样做:
f = open('eggs.csv', 'w')
spamWriter = csv.writer(f, delimiter=' ', quotechar='|')
# the rest of your code
f.close()
现在你应该能在eggs.csv里看到你想要的内容了。
希望这对你有帮助。