Python - 使用csv写入器后csv文件为空

10 投票
5 回答
17985 浏览
提问于 2025-04-16 05:14

我是一名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

这可能来得有点晚,但我还没看到其他地方提到过的一个解决办法是使用 withas。在这种情况下,它可能看起来像这样:

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里看到你想要的内容了。

希望这对你有帮助。

撰写回答