我正在处理巨大的JSON文件,大小在100-300 MB之间。因此,为了节省磁盘空间(和计算时间?),我将JSON文件转换为.json.gz
文件,并进行如下操作:
with gzip.GzipFile(json_file, 'r') as f:
return json.loads(f.read().decode('utf-8'))
json.loads
不会对内存使用造成任何问题,但是我想提高速度,因此我尝试了py-yajl
(不要与yajl-py混淆,也尝试过,但是自从我解析流式JSON以来,这花费了更多时间,就像这样:
yajl.loads(f.read().decode('utf-8'))
但是,正如我在声称yajl
比json
和simplejson
库的网站上看到的那样,我看不到执行时间有所改善。相反,与json
相比花费了更多时间。我在这里想念什么吗?在什么情况下,yajl
应该比json/simplejson
快?速度也取决于JSON文件的结构吗?
我的JSON文件如下:
[
{
"bytes_sent": XXX,
"forwardedfor": "-",
"hostip": "XXX",
"hostname": "XXX",
"https": "on",
"landscapeName": "XXX",
},
...
]
我知道这是一个主观的问题,可能会结束,但是我无法在任何地方消除疑问,同时,我想了解这些库在黑白方面的区别更多细节,请在这里询问。
答案 0 :(得分:0)
如果您一次将整个结构读入内存,则外部库没有任何好处。这样的工具的动机在于,它允许您零碎地处理事物,而不必首先或根本不将整个事物加载到内存中。如果您的JSON是事物列表,请通过库提供的回调一次处理一件事物。