猿问

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

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

所以我有一些相当大的json编码文件。最小的是300MB,但这是迄今为止最小的。其余的是多GB,大约2GB到10GB +。

所以当我尝试使用Python加载文件时,我似乎耗尽了内存。我目前正在进行一些测试,看看处理这些东西需要多长时间才能看到从这里开始。这是我用来测试的代码:

from datetime import datetimeimport jsonprint datetime.now()f = open('file.json', 'r')json.load(f)f.close()print datetime.now()

毫不奇怪,Python给了我一个MemoryError。似乎json.load()调用json.loads(f.read()),它试图首先将整个文件转储到内存中,这显然不会起作用。

我能干什么方式解决这个问题吗?

我知道这是旧的,但我不认为这是重复的。答案是一样的,但问题是不同的。在“重复”中,问题是如何有效地读取大文件,而这个问题处理甚至根本不适合内存的文件。效率不是必需的。


HUWWW
浏览 4014回答 2
2回答

泛舟湖上清波郎朗

这里的问题是作为一种格式的JSON通常被完整地解析然后在内存中处理,这对于如此大量的数据显然是有问题的。解决方案是将数据作为流处理 - 读取文件的一部分,使用它,然后重复。最好的选择似乎是使用像ijson这样的模块 - 一个可以将JSON用作流的模块,而不是块文件。

繁星coding

如果JSON文件是一个巨大的列表(例如),那么将其解析为Python在没有一次完成所有操作的情况下就没有多大意义。我想你最好的办法是找到一个像SAX一样处理JSON的模块,并为你提供启动数组和东西的事件,而不是给你对象。不幸的是,标准库中不存在这种情况。
随时随地看视频慕课网APP

相关分类

Python
我要回答