Python - 使用csv writer后,csv文件为空

10

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()

这个方法可行。我不确定为什么第一个方法对我无效。


1
你已经打开了文件,没问题。CSV模块会自动关闭它吗?如果不会,请手动关闭文件以便更新。 - Shiv Deepak
5个回答

15

我对csv模块不太熟悉,但这看起来更像是文件IO问题,而不是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 文件中看到你想要的内容了。

希望能对你有所帮助。


是的,看起来我们同时想出了解决办法!不过,我仍然觉得有些奇怪,对于一些人来说,没有“f.close()”也能正常工作。 - Mina
我认为那些不需要使用"f.close()"的人是使用了"with"和"as"语句。如果你有这样的例子,那么我可以帮你分析一下。 - inspectorG4dget

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'])

我以前使用过这个,没有遇到过问题。


0

那段代码是有效的。你确定你的操作系统没有将 CSV 大小四舍五入吗?毕竟,它只有几个字节!

你可以尝试 print(open("eggs.csv").read()) 来查看文件是否为空,或者从命令行输入 more eggs.csv


这绝对是有可能的。但更多的是,当我在记事本中打开“eggs.csv”时,里面什么也没有。 - Mina
@Amanda:在这种情况下,它肯定是空的。你确定你正在检查“eggs.csv”文件吗?也许你没有在你认为的目录中工作...尝试使用os.getcwd() - Katriel

0

你发布的代码对我来说完美无缺。

你确定你运行脚本的目录实际上是你要检查的目录吗?(你每次尝试之前都删除了“eggs.gsv”吗?)


实际上,当我尝试再次删除时,它显示该文件无法被删除,因为另一个程序正在使用它。这启发了我尝试进行上述编辑的想法。 - Mina

0

我在Python解释器中尝试了这个。在第一段代码中,只有在退出Python(即文件关闭)后,我才能看到CSV中的内容。显然,这与关闭文件有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接