如何对含百万条数据的大型JSON文件进行随机打乱?
405MB大型JSON文件随机打乱时的格式错误解决
问题背景
手里有个包含100万条数据的JSON文件(大小405MB),数据按orderkey字段排好序,需要把数据随机打乱。用了一段在小型JSON文件上能正常运行的Python代码,但在这个大文件上直接报错。
尝试的代码
import json import random with open("sorted.json") as f: data = json.load(f) random.shuffle(data) with open("sorted.json") as f: json.dump(data, f, indent=2)
触发的错误
~/Desktop/shuffleData$ python3 toShuffle.py Traceback (most recent call last): File "/home/andrei/Desktop/shuffleData/toShuffle.py", line 5, in <module> data = json.load(f) File "/usr/lib/python3.10/json/__init__.py", line 293, in load return loads(fp.read(), File "/usr/lib/python3.10/json/__init__.py", line 346, in loads return _default_decoder.decode(s) File "/usr/lib/python3.10/json/decoder.py", line 340, in decode raise JSONDecodeError("Extra data", s, end) json.decoder.JSONDecodeError: Extra data: line 1 column 403646259 (char 403646258)
解决过程
盯着报错信息看,提示JSON存在额外数据。检查文件后发现,JSON数组末尾多了一个多余的},整个文件格式变成了[{...},{...}]}——正常格式应该是[{...},{...}]。手动删掉这个多余的}后,再运行代码就可以正常执行了。
额外优化提示
处理这种几百MB的大型JSON文件时,直接用json.load()把整个文件加载到内存,可能会占用大量内存导致性能问题。如果后续遇到类似场景,可以考虑把JSON改成每行一个对象的格式,然后逐行读取、打乱后再写入,这样能有效降低内存占用。
内容的提问来源于stack exchange,提问作者r4sk01
相关产品推荐
相关产品推荐

