Python 如何从';它太大,无法加载到内存中?
我正在尝试从我的文件中检索这些人的姓名。文件大小为Python 如何从';它太大,无法加载到内存中?,python,python-3.x,Python,Python 3.x,我正在尝试从我的文件中检索这些人的姓名。文件大小为201GB import json with open("D:/dns.json", "r") as fh: for l in fh: d = json.loads(l) print(d["name"]) 每当我尝试在windows上运行此程序时,都会遇到内存错误,即内存不足 有没有可靠的方法可以在不加载整个文件的情况下解析单个键、值对?我想把文件分块读,但我不知道如何开始 以下是示例: 每行用换行符隔
201GB
import json
with open("D:/dns.json", "r") as fh:
for l in fh:
d = json.loads(l)
print(d["name"])
每当我尝试在windows上运行此程序时,都会遇到内存错误,即内存不足
有没有可靠的方法可以在不加载整个文件的情况下解析单个键、值对?我想把文件分块读,但我不知道如何开始
以下是示例:
每行用换行符隔开。希望这有帮助。不幸的是,不能保证JSON文件的每一行对解析器本身都有意义。恐怕JSON从来就不是用来交换数十亿字节的数据的,正是因为每个JSON文件都包含一个完整的数据结构。在XML世界中,人们编写了增量事件驱动(基于SAX)解析器。我不知道有这样一个JSON库。您可能想尝试一下
ijson
:不调用读线
<代码>对于fh中的l:…不要使用readlines()。这取决于文件的结构。您知道,open
为您提供了一个行上的迭代器,对吗?因此,内存崩溃的那一行是带有读线的那一行。由于您的代码表明该文件包含JSON数据,您甚至可以理解单个块吗?最后:201GB,天哪。@timgeb是的,我能做什么。我在文件中有我的客户数据,需要使用我认为正确理解的名称进行检查。首先,我想把标题改为“如何从一个JSON文件中可靠地访问一个太大而无法加载到内存中的键值对?”至少有一个,它是一个python包:但是这个库的内存效率有多高?你能想象一次201 GB吗。。我的系统即将消亡……:P请修改我的示例以便更好地理解。@holdenweb FWIW ijson基于纯C语言的YAJL(),因此可能还有其他语言的绑定。这个库的内存效率有多高?多快?201 GBs?@JafferWilson别偷懒了,试试吧。你得自己试试。但是它是一个sax解析器,所以重点是你不必在内存中读取整个文件,FineManual中有一个例子FWIW@timgeb请不要误会我。。。我已经试着解决这个问题两天了,我失眠了。。。。我不知道你是否能想象我现在的处境……:)