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