2016-08-18 33 views
1

我有一个大的JSON文件,该文件是这样的:提取值

{"details":{ 

    "1000":[ 
     ["10","Thursday","1","19.89"], 

     ["12","Monday","3","20.90"], 
     ... 
    ] 
    "1001":[ 
     ["30","Sunday","11","80.22"], 

     ["88","Wednesday","22","8.29"], 
     ... 
    ] 

    } 
} 

现在我抽取名单存在变数,如“1000”,“1001”,从“细节“值使用ijson下面(交互式JSON)使用代码给出:

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中打印最终列表后,它会继续运行。

我猜测,该发电机(对象)在上面的代码中没有遇到的StopIteration不知道为什么。

任何人都可以帮忙吗? 有一点帮助,将不胜感激。

+0

你有真正的案例文件进行测试吗?使用示例文件我无法重现错误。 – Kaniabi

回答

1

好的事实证明,因为大尺寸JSON文件,该文件是>800MB约超过一百万条记录解析需要时间来完成,因此

,循环终止,最终却需要一些时间才能完成。在正常规格的电脑上,它肯定需要一些时间。

而且使用:

import ijson as ijson 

是非常大的文件的方式慢,因为大多数分析使用Python的后端代码,所以序,以提高速度发生,

这是更好的方式使用

import ijson.backends.yajl2_cffi as ijson 

,因为它使用CFFI这确实提高了ABO血型运行时间在C语言中后端ve代码。