我有一个大型的JSON文件,如下所示:
{"details":{
"1000":[
["10","Thursday","1","19.89"],
["12","Monday","3","20.90"],
...
]
"1001":[
["30","Sunday","11","80.22"],
["88","Wednesday","22","8.29"],
...
]
}
}
现在我使用 ijson (Interactive Json)使用代码提取“详细信息”值中的“1000”,“1001”等变量中的列表下面:
import ijson as ijson
filename='Clean_Details.json'
with open(filename,'r') as f:
objects=ijson.items(f,'details.1001.item')
for row in objects:
print(row)
print("Done")
但问题是:上面代码中的循环没有终止。在1001中打印最终列表后,它继续运行。
我猜测上面代码中的Generator(对象)没有遇到 StopIteration 不知道原因。
有人可以帮忙吗? 我们将不胜感激。
答案 0 :(得分:2)
好的,因为 JSON 文件的大尺寸是> 800MB ,大约有超过一百万条记录,解析需要时间才能完成,所以
循环最终终止,但需要一些时间才能完成。在具有正常规格的电脑上,它肯定需要一些时间。
还使用:
import ijson as ijson
在非常大的文件上速度慢,因为大多数解析都是使用python后端代码进行的,所以为了提高速度,
使用
更好import ijson.backends.yajl2_cffi as ijson
因为它使用 cffi 在C语言中有一个后端,这确实改善了上述代码的运行时间。