Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从';它太大,无法加载到内存中?_Python_Python 3.x - Fatal编程技术网

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请不要误会我。。。我已经试着解决这个问题两天了,我失眠了。。。。我不知道你是否能想象我现在的处境……:)