2016-08-18 48 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代碼。