Python 如何读取超大 json 文件?

2018-02-07 16:52:34 +08:00
 UN2758
有一个 4g 多的 json 文件,格式是:
{
'id': 'xxxxx'
'q' : 'xxxxx'
'a' : 'xxxxx'
},
{
'id': 'xxxxx'
'q' : 'xxxxx'
'a' : 'xxxxx'
}
这样的,用 ijson 怎么打开呢?prefix 路径因为没有顶级键,不会设置啊,然后就报错了
4067 次点击
所在节点    问与答
16 条回复
noe132
2018-02-07 17:32:44 +08:00
超大文件不适合 JSON 存储。。。。
如果是一个大数组,可以想办法优化成

{...}
{...}
{...}

的 JSON line 格式去以行去读。或者如果每个对象占用行固定也可以以固定行数去读。。
否则你得把 4G 的文件整体解析到内存里才行。
bazingaterry
2018-02-07 17:38:00 +08:00
已知格式可以手寫 json parser,結合業務需求一點一點讀
wellsc
2018-02-07 17:39:56 +08:00
存到 mongo 里试试
twor
2018-02-07 19:08:06 +08:00
一行一行的读,解析后,扔到数据库,或者保存成其他格式?
huiyifyj
2018-02-07 19:11:17 +08:00
4G 的 Json.

0.0!!!
MeteorCat
2018-02-07 20:06:05 +08:00
吓尿了 4G 的数据,解析起来内存应该爆炸了
Lxxyx
2018-02-07 20:18:37 +08:00
用 Node 处理过 3g 的 json,直接 load,v8 扛不住,后面用的是 stream 的方式,一点一点解析。(供参考)
neocanable
2018-02-07 22:33:15 +08:00
cat yourfile.json | grep -v "{" | grep -v "}," > new_file
新的文件格式就是:
'id': 'xxxxx'
'q' : 'xxxxx'
'a' : 'xxxxx'
'id': 'xxxxx'
'q' : 'xxxxx'
'a' : 'xxxxx'
'id': 'xxxxx'
'q' : 'xxxxx'
'a' : 'xxxxx'


然后一行一行的读吧,很简单
xiaozizayang
2018-02-07 23:30:27 +08:00
pandas 分段读取 或者 spark 吧
ulala
2018-02-07 23:38:29 +08:00
曾经有类似的需求,一个好几 g 的文件,每一行一个 json 对象。写了个 C 程序一行行读入,然后抛到队列里并发用 rapidjson 去解析。速度还是挺快的。
zc666
2018-02-08 00:46:15 +08:00
可以了解下 jq
binux
2018-02-08 01:44:54 +08:00
streaming JSON parser python
KaelSunstrider
2018-02-08 01:54:41 +08:00
一行一行 yield 出来,处理一行就继续 yield 下一行。或则使用 ubuntu 下的行切割命令分成小文件再处理
cout2013mr
2018-02-08 09:22:21 +08:00
要是数组还好,可以一行行来读文件,你要是个整个大对象,key 还没有命名规则的话,真想不到什么好方法。。
UN2758
2018-02-08 12:14:11 +08:00
谢谢大家了,倒腾来倒腾去发现 json 确实不合适储存大文件,改用 csv 了
xwhxbg
2018-02-08 16:56:52 +08:00
readline,我用 js 读过 5 个多 G 的文件

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/429232

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX