【问题标题】:Empty CSV file when writing lots of data写入大量数据时为空 CSV 文件
【发布时间】:2018-08-03 23:27:28
【问题描述】:

我目前正在使用 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,..

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

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]

为什么会这样?

【问题讨论】:

  • 尝试使用上下文管理器。您永远不会关闭文件,因此它可能不会刷新。无论如何,在处理文件时应始终使用上下文管理器。
  • 您必须在完成写入后关闭文件。

标签: python csv export-to-csv


【解决方案1】:

当你用w打开一个文件时,它会清除之前的数据

来自文档

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

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

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

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

参考:How do you append to a file?

在 DYZ 发表评论后编辑:

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

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

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

【讨论】:

  • OP 未附加到文件中。他们只打开一次。问题在于他们没有关闭文件。
  • 我会更新答案。接得好。 OP 仍然需要使用正确的模式,否则问题仍然存在。
【解决方案2】:

我会为此使用 Pandas:

import pandas as pd
headers = ['header1', 'header2', ...]
scraped_df = pd.DataFrame(data, columns=headers)
scraped_df.to_csv('filepath.csv')

在这里,我假设您的 data 对象是一个列表列表。

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 2014-01-24
    • 2017-09-27
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多