在Python中读取大型JSON文件

在Python中读取大型JSON文件,python,json,sed,Python,Json,Sed,我有一个大的JSON文件~5GB,但它不是由一个JSON文件组成,而是将几个JSON文件连接在一起 {"created_at":"Mon Jan 13 20:01:57 +0000 2014","id":422820833807970304,"id_str":"422820833807970304"} {"created_at":"Mon Jan 13 20:01:57 +0000 2014","id":422820837545500672,"id_str":"4228208375455

我有一个大的JSON文件~5GB,但它不是由一个JSON文件组成,而是将几个JSON文件连接在一起

{"created_at":"Mon Jan 13 20:01:57 +0000 2014","id":422820833807970304,"id_str":"422820833807970304"}
{"created_at":"Mon Jan 13 20:01:57 +0000     2014","id":422820837545500672,"id_str":"422820837545500672"}.....
在花括号}{之间没有新行

我尝试使用sed将花括号替换为换行符,然后使用以下内容读取文件:

data=[]
for line in open(filename,'r').readline():
data.append(json.loads(line))
但这不起作用

如何相对快速地读取此文件


非常感谢您的帮助

这是一个黑客攻击。它不会将整个文件加载到内存中。我真的希望您使用Python 3

如果你注意到一些无法解码的对象,那么你可以告诉我,我们可以找到解决方案

免责声明这不是有效且最佳的解决方案。这是一种展示如何使之成为可能的黑客行为


讨论因为它不会将整个文件加载到内存中,所以正则表达式不起作用。它还使用Python实现,而不是C实现。这可能会使它变慢。我真的很讨厌这项简单的任务是多么困难。希望其他人能指出不同的解决方案。

当你尝试使用
data.app时end(json.loads(line))
;您正在将整个5 GB的数据加载到RAM中。好的。但是,即使我将文件拆分为较小的文件(50mb),我也无法读取单独的json文件。这看起来像是Mongo数据库转储。可能会将其放回Mongo数据库,并使用python接口实现这一点?基本上我有很多json文件(其中每个JSON代表一个文档)放在一个文件中。我如何将它们拆分并解析它们?如果您使用
sed的/}{/}\n{/g'
将这一大行拆分为多行呢?谢谢,现在就试用一下。我使用的是Python 2.7
from DecodeLargeJSON import *
import io
import json

# create a file with two jsons
f = io.StringIO()
json.dump({1:[]}, f)
json.dump({2:"hallo"}, f)
print(repr(f.getvalue()))
f.seek(0) 

# decode the file f. f could be any file from here on. f.read(...) should return str
o1, idx1 = json.loads(FileString(f), cls = BigJSONDecoder)
print(o1) # this is the loaded object
# idx1 is the index that the second object begins with
o2, idx2 = json.loads(FileString(f, idx1), cls = BigJSONDecoder)
print(o2)