python - 写入大量数据时为空 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]
为什么会这样?
解决方案
当您使用 打开文件时w
,它会删除以前的数据
从文档
w:打开写入,先截断文件
因此,当您在使用 写入抓取数据后打开文件时w
,您只会得到一个空白文件,然后在其上写入标题,因此您只能看到标题。尝试替换w
为a
. 所以打开文件的新调用看起来像
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
块,文件将被关闭。
推荐阅读
- c# - 如何测试所有 ASP.NET Core 控制器依赖注入是否有效?
- entity-framework - 如何在数据库 asp.net core 2.1 中播种图像
- javascript - 有人可以解释一下这个 ( !! ) 运算符吗
- php - php单元测试-属性不存在
- android - 在 Android 上生成和导出 RSA 密钥对
- git - 给定 svn status 命令的 Git 等效项?
- mysql - 外键指的是同一张表Mysql中的主键
- bash - 将两个进程输出管道发送到双管道输入进程
- javascript - php代码中的模态
- python-2.7 - 输入匹配来自两个数据帧的两列的熊猫数据帧