Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
使大型json文件在python中快速可用_Python_Json_Storage_Pickle - Fatal编程技术网

使大型json文件在python中快速可用

使大型json文件在python中快速可用,python,json,storage,pickle,Python,Json,Storage,Pickle,我有一个大约5GB的多个json文件,我在上面做了一些探索性的数据分析。问题是,每次我加载文件时,使用以下代码加载文件大约需要1分钟: with open(json_fn, 'r') as f: # multiple jsons in one file! (one per line) for line in f: data = json.loads(line) 有没有更有效的方法来存储这些数据,以便在python中加载?我在考虑pickle(因为它是一种二进制格式,通常

我有一个大约5GB的多个json文件,我在上面做了一些探索性的数据分析。问题是,每次我加载文件时,使用以下代码加载文件大约需要1分钟:

with open(json_fn, 'r') as f:   # multiple jsons in one file! (one per line)
   for line in f:
       data = json.loads(line)

有没有更有效的方法来存储这些数据,以便在python中加载?我在考虑pickle(因为它是一种二进制格式,通常更快),但是。有什么建议可以避免每次等待1分钟吗?

为此,您可以使用
ijson
。ijson允许以流的形式懒洋洋地读取文件

import ijson

json_data = ijson.parse(open(FILE_PATH, 'r'))

for prefix, event, value in json_data:
    print(value)
参考


注意:借助本文中提到的后端,您可以大大提高性能。

这正是OP已经在做的事情;它只是在同一迭代器中结合了文件读取和单行解析。@chepner不,他使用内置的json库。我建议ijsonYes,迭代器做的事情与OP相同“s代码:它从文件中读取一行,并将其解析为JSON。但它是否比读取和JSON快。一次加载一行?”?我在文档中看不到任何关于加速的内容。我认为
ijson
的主要好处是惰性地解析单个值,而不是在单个文件中解析一系列值。
pickle
的目的是保存和恢复任意Python对象,而不是高效地存储文本数据。如果行具有相同(或基本相同)的结构,是否可以选择将它们存储在适当的数据库中?如果你可以pickle,当然你可以推到MySQL、sqlite或者其他任何东西。如果你的数据不需要引用,并且你被普通文件困住了,甚至csv也有意义(更容易解析):-D