一尘不染

在Python中读取相当大的json文件

json

所以我有一些相当大的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()

毫不奇怪,Python给了我一个MemoryError。看来json.load()会调用json.loads(f.read()),后者首先尝试将整个文件转储到内存中,这显然行不通。

有什么办法可以解决这个问题吗?

我知道这很旧,但是我不认为这是重复的。虽然答案是相同的,但问题是不同的。在“重复”中,问题是如何有效地读取大文件,而这个问题处理的是甚至根本无法容纳到内存中的文件。效率不是必需的。


阅读 581

收藏
2020-07-27

共1个答案

一尘不染

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

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

最好的选择似乎是使用ijson之类的东西
-一个将JSON作为流而不是作为块文件使用的模块。

2020-07-27