Python CSV导出4000行限制

时间:2017-01-31 17:38:46

标签: python json csv

根据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的RAM
    • enter image description here
  • Python 3.5.2(v3.5.2:4def2a2901a5,2016年6月25日,22:18:55)[MSC v.1900 64 bit(AMD64)]

2 个答案:

答案 0 :(得分:1)

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

import csv
print csv.field_size_limit()

输出:131072

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

答案 1 :(得分:0)

没有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:59开始运行的每个小时,为任何给定日期拨打24小时的电话。通过23:00:00 - 23:59:59的方式相应地以一小时为增量进行迭代。似乎一小时时间范围内的数据永远不会超过4000记录限制,所以在我的情况下,这种解决方案是对提供被调用记录的设备/服务器服务的记录限制的解决方法。