【问题标题】:Python CSV export 4000 line limitPython CSV 导出 4000 行限制
【发布时间】:2017-02-04 06:22:13
【问题描述】:

根据 this question 我不久前发布的消息,我正在解析 JSON 格式的数据,并根据需要将其提取为 CSV 文件格式。

我现在注意到,使用较大的 JSON 会提取数据所在的 CSV 文件在第 4000 行之后停止创建记录,但 JSON 原始数据文件肯定有更多行它应该提取超过 4000。 . .所以这就是我的想法并且是错误的。我最终在下面添加了这个问题的答案,包括我的案例中应用的内容、供应商建议的修复以及解决问题的实际应用修复。

相关问题

  • 使用下面列出的 Python 方法是否存在 4000 行导出限制或行读取限制?

  • with open(RawDataFile,"r") as file:
        data = json.load(file)
    
    with open(CsvFile,"w",newline='') as file:
        csv_file = csv.writer(file)
    
  • 是否有任何方法可以解决所有行都可以导出到文件而不管记录/行数如何的问题?

    • 我什至会考虑将每组 4000 条记录放入其自己的文件的逻辑,即文件名的最后一部分可以使用计数自动迭代,例如<filename1><filename2><filename2> 等等,每个记录不超过 4000 条。
  • 理想情况下,我想继续使用 Python,即使使用与此不同的方法将所有数据放入一个文件中,因为 CSV 进行了相应的解析。

完整的 Python 逻辑(虽然有所改变)

我需要能够将所有记录导出到一个平面文件,而不仅仅是前 4000 个。使用下面的格式可以让我准确了解所需的格式。

import json
import csv
import sys

RawDataFile = sys.argv[1]
CsvFile = sys.argv[2]

with open(RawDataFile,"r") as file:
    data = json.load(file)

with open(CsvFile,"w",newline='') as file:
    csv_file = csv.writer(file)

    for dev in data["devs"]:
        for tag in dev["tags"]:
            if "history" in tag:
                for hist in tag["history"]:
                    csv_file.writerow([tag['TagId'], hist['date'].replace('T',' ').replace('Z',''), hist['value']])

环境规格

  • Windows Server 2008 Enterprise x64(很遗憾)
    • 144 GB 内存
  • Python 3.5.2(v3.5.2:4def2a2901a5,2016 年 6 月 25 日,22:18:55)[MSC v.1900 64 位 (AMD64)]

【问题讨论】:

  • 分块读取 csv 文件并将内容附加到目标文件
  • 你的 Python 是 64 位版本吗?您正在使用哪种内存?
  • 我在您的代码中看不到任何明显的内容。你确定这不仅仅是你的数据范围吗?你试过以某种方式数数吗?
  • @wu4m4n 我很困惑,OP 从来没有提到 xlsx。标准的csv 库应该足够且内存高效。
  • @Walmart 没关系,只要解决了你的问题,你就可以自己回答。我认为没有必要删除。我认为这个问题本身写得很好,即使潜在的问题有点令人印象深刻,它也可以作为 SO 努力成为的知识库的一部分。我自己每天都在处理这些事情,我从接触别人的问题中获得了很多价值。

标签: python json csv


【解决方案1】:

我不确定,因为我不知道您的数据是什么样的,但是您可以更改 csv 的字段大小限制。在 python 2.7 中,默认为:

import csv
print csv.field_size_limit()

输出:131072

这似乎是 python 2.7 的最大值。也许通过使用newline = '',您无意中连接了行并因此创建了一个大字段。

【讨论】:

  • 感谢您的想法,但它也不是newline = ' ' 也不是字段截断等类型问题......这是实际数据在 4000 条记录处被截断; Python 似乎没有我想象的这个限制。
【解决方案2】:

没有 Python CSV 导出 4000 行限制

我的问题正如@juanpa.arrivillaga 所建议的那样;我得到的数据文件在 4000 条记录级别被截断,因此 Python 可以根据它拥有的数据很好地将 JSON 数据解析为 CSV。

我与供应商支持确认,我们通过带有参数等的 URL API 调用调用 JSON 文件的设备由于某种原因在 4000 条记录处中断。

因此,我做了一个错误且未经验证的假设,即我拥有从 URL 调用中传递给设备的日期和时间范围参数中的所有数据,因为支持文档提到了限制。事实上,我被告知这种方法没有限制,直到我将 URL 发送给他们以支持他们尝试,然后他们确认自己正是我所看到的。

建议修复

在我的情况下,建议的解决方法是调用不同的 URL,但该 URL 进行了同步,并且不允许基于日期和时间戳调用数据。

应用修复

我构建了一些逻辑,根据每天从00:00:00 - 00:59:5901:00:00 - 01:59:5901:00:00 - 01:59:59 一直运行到23:00:00 - 23:59:59 的每个给定日期的 24 小时时间段进行调用,相应地迭代一小时增量。似乎一小时时间范围内的数据从未超过 4000 条记录限制,因此在我的情况下,这种解决方案是解决提供被调用记录的设备/服务器服务的记录限制的一种解决方法。

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 2021-12-03
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多