首页 > 解决方案 > 写入大量数据时为空 CSV 文件

问题描述

我目前正在使用 Python 3 进行数据抓取项目,并尝试将抓取的数据写入 CSV 文件。我目前的做法是这样的:

import csv

outputFile = csv.writer(open('myFilepath', 'w'))
outputFile.writerow(['header1', 'header2'...])
for each in data:
     scrapedData = scrap(each)
     outputFile.writerow([scrapedData.get('header1', 'header 1 NA'), ...])

但是,此脚本完成后,CSV 文件为空白。如果我只是运行:

import csv

outputFile = csv.writer(open('myFilepath', 'w'))
outputFile.writerow(['header1', 'header2'...])

生成一个包含标题的 CSV 文件:

header1,header2,..

如果我只是在 1 中刮擦data,例如:

outputFile.writerow(['header1', 'header2'...])
scrapedData = scrap(data[0])
outputFile.writerow([scrapedData.get('header1', 'header 1 NA'), ...])

将创建一个 CSV 文件,其中包括以下内容的标题和数据data[0]

header1,header2,..
header1 data for data[0], header1 data for data[0]

为什么会这样?

标签: pythoncsvexport-to-csv

解决方案


当您使用 打开文件时w,它会删除以前的数据

从文档

w:打开写入,先截断文件

因此,当您在使用 写入抓取数据后打开文件时w,您只会得到一个空白文件,然后在其上写入标题,因此您只能看到标题。尝试替换wa. 所以打开文件的新调用看起来像

outputFile = csv.writer(open('myFilepath', 'a'))

您可以在此处详细了解有关打开文件的模式的更多信息

参考:你如何附加到文件?

在 DYZ 评论后编辑:

完成附加后,您还应该关闭文件。我建议使用如下文件:

with open('path/to/file', 'a') as file:
    outputFile = csv.writer(file)
    # Do your work with the file

这样您就不必担心记得关闭它。一旦代码存在with块,文件将被关闭。


推荐阅读