CSVWriter在我写入数据时未将数据保存到文件

发布于 2021-01-29 19:10:43

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()方法中打开的文件?
关注者
0
被浏览
146
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    采用

    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.
    

    第一种方法的好处是,在发生异常的情况下,文件也会自动正确关闭。

    如果您希望文件对象是匿名的,则仅在程序退出时将其关闭。什么时候刷新或是否刷新取决于操作系统-因此可能永远不会退出。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看