【问题标题】:export scraped data to CSV format with rowwise headers使用逐行标题将抓取的数据导出为 CSV 格式
【发布时间】:2013-08-28 02:31:21
【问题描述】:

默认情况下,Scrapy 将数据写入 CSV 文件列。一个字段/列。我如何按行编写数据,即。水平方向,其中一行的第一个单元格将是字段的名称。

我查看了scrapy documentation,但没有任何东西可以用来更改写入 CSV 数据的格式

更新:

我现在的情况:

产品、价格
电视,25000
冰箱,15000

这就是我想要的:

产品、电视、冰箱
价格,25000,15000

我为什么要这样?
我正在继续之前其他人完成的数据提取过程,并且已经完成了 65% 的过程。所以这是为了保持格式的一致性。

【问题讨论】:

  • 你能用示例数据解释你想要的格式吗?
  • @pault。更新了问题
  • 就我个人而言,我会导出为 CSV,然后用 Python 编写一个小的转换脚本,使用 csv(参见 doc

标签: python csv python-2.7 scrapy


【解决方案1】:

如果 CSV 文件很大,并且您希望避免将数据加载到 Python 列表或字典中,您可以这样做:

infile = "/path/to/input_file.csv"
outfile = "/path/to/output_file.csv"
with open(infile, 'r') as source:
    num_fields = len(source.readline().split(','))
    source.seek(0) # Go back to beginning
    with open(outfile, 'w') as dest:
        for n in range(num_fields):
            for input_line in source:
                dest.write(input_line.split(',')[n] + ',')
            source.seek(0)
            dest.write('\b\n') # remove trailing comma

否则,您可以加载所有内容:

infile = "/path/to/input_file.csv"
outfile = "/path/to/output_file.csv"
with open(infile, 'r') as source:
    data = [line.strip().split(',') for line in source]
with open(outfile, 'w') as dest:
    for n in range(len(data[0])):
        dest.writeline(','.join(line[n] for line in data))

【讨论】:

  • 谢谢,问题不在于大文件。文件很小。但问题是有多个文件。就像,大约有一百万个页面,我将每个页面的数据保存在不同的 csv 中。
猜你喜欢
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 2018-02-17
相关资源
最近更新 更多