读取相当大的 JSON 文件 [重复]

2024-03-13

我有一些大的 json 编码文件。最小为300MB;其余的都是多个 GB,从 2GB 到 10GB+ 不等。

尝试在 Python 中加载文件时,我似乎内存不足。

我尝试使用此代码来测试性能:

from datetime import datetime
import json

print datetime.now()

f = open('file.json', 'r')
json.load(f)
f.close()

print datetime.now()

毫不奇怪,这会导致MemoryError。看起来json.load() calls json.loads(f.read()),它试图首先将整个文件转储到内存中,这显然是行不通的。

我怎样才能干净地解决这个问题?


我知道这很旧,但我不认为这是重复的。虽然答案相同,但问题不同。在“重复”中,问题是如何有效地读取大文件,而这个问题处理的是根本不适合内存的文件。效率没有要求。


这里的问题是,JSON 作为一种格式,通常会进行完整解析,然后在内存中处理,这对于如此大量的数据来说显然是有问题的。

解决方案是将数据作为流处理 - 读取文件的一部分,使用它,然后重复。

最好的选择似乎是使用类似的东西ijson http://pypi.python.org/pypi/ijson/- 一个将 JSON 作为流而不是块文件使用的模块。

编辑:也值得一看 -卡西夫的评论 https://stackoverflow.com/questions/10382253/reading-rather-large-json-files-in-python/10382359#comment43555683_10382359 about json-streamer https://github.com/kashifrazzaqui/json-streamer and 亨里克·海诺的评论 https://stackoverflow.com/questions/10382253/reading-rather-large-json-files-in-python/10382359#comment64978638_10382359 about bigjson https://github.com/henu/bigjson.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取相当大的 JSON 文件 [重复] 的相关文章

随机推荐