CSVWriter在写入时不保存数据

时间:2010-10-20 10:09:11

标签: python csv

Python新手对csv模块感到有点沮丧。按照这个速度,如果我自己编写文件解析器会更容易,但我想用Pythonic方式做事....

我写了一个小python脚本,应该将我的数据保存到CSV文件中。

以下是我的代码片段:

import csv

wrtr = csv.writer(open('myfile.csv','wb'),delimiter=',', quotechar='"')

for row in rows:
    wrtr.writerow([row.field1,row.field2,row.field3])

文件myfile.csv已成功创建,但它是空的 - 但是对它有一个锁定,因为它仍然被Python进程使用。似乎数据已写入内存中的文件,但尚未刷新到磁盘。

由于Python进程持有文件锁,所以我认为我负责释放锁。以下是我的问题:

  1. 如何让python刷新到磁盘
  2. 如何关闭在csv.writer()方法中打开的文件?

3 个答案:

答案 0 :(得分:56)

使用

with open('myfile.csv','wb') as myfile:
    wrtr = csv.writer(myfile, delimiter=',', quotechar='"')
    for row in rows:
        wrtr.writerow([row.field1,row.field2,row.field3])
        myfile.flush() # whenever you want

myfile = open('myfile.csv','wb')
wrtr = csv.writer(myfile, delimiter=',', quotechar='"')
for row in rows:
    wrtr.writerow([row.field1,row.field2,row.field3])
    myfile.flush() # whenever you want, and/or
myfile.close() # when you're done.

第一种方法的好处是,如果出现异常,您的文件也会自动正确关闭。

如果您希望文件对象是匿名的,那么只有在程序退出时才会关闭它。何时或是否刷新取决于操作系统 - 所以它可能永远不会退出。

答案 1 :(得分:6)

file objectflush()close()方法。或者使用with

答案 2 :(得分:-1)

哇,我在错误的地方,跳过此答案!

我遇到了同样的问题。在1个WriteRecords调用中写了1000条记录,但是最后一条记录写得不完整。

即使像fileStream.Flush();这样的呼叫也不起作用。

执行以下操作时,它将正确刷新:

csvWriter.Flush();
csvWriter.Context.Writer.Flush();

见过:https://github.com/JoshClose/CsvHelper/issues/967#issuecomment-482503533