[英]How to use tqdm for JSON file load progress bar?
我正在為 JSON 文件處理編寫一個 Python 腳本。 它基本上分為三個過程:加載、編碼和打印。 雖然我已經使用 tqdm 輕松地為編碼和打印創建了進度條,但我不知道如何為加載做這件事。
我已經徹底閱讀了 tqdm 文檔並在此處進行了搜索,但沒有任何線索
import json
from tqdm import tqdm, trange
from iso3166 import countries
geo_json_events_path = r'/cygdrive/c/elastic/gtd.geojson'
with open(geo_json_events_path) as f:
data = json.load(f)
我希望顯示json.load()
方法的進度條。
得到它了!
在json.load()
方法中使用object_hook
參數。 我已經嘗試使用一個簡單的計數函數,它返回的值比源文件中的行數大三倍,所以我認為這是錯誤的。 在繼續為json.load
返回的每個字典執行我的函數后,我意識到我的文件中每行有三個字典,所以我的函數沒問題,我只需要在json數據中找到正確的嵌套級別來獲得所需的迭代。 這是結果:
from tqdm import tqdm
import json
def hook(obj):
value = obj.get("features")
if value:
pbar = tqdm(value)
for item in pbar:
pass
pbar.set_description("Loading")
return obj
f = open('/cygdrive/c/elastic/gtd_tst.geojson')
docs = json.load(f, object_hook=hook)
for doc in docs:
print(doc)
這篇文章的第一個答案非常有助於找到解決方案: Python解碼JSON中的嵌套JSON
這是一個稍微更通用的解決方案,用於導入具有多個對象的 json 文件:
def hook(obj):
for key, value in obj.items():
pbar = tqdm(value)
if type(value) is list:
for _ in pbar:
pbar.set_description("Loading " + str(key))
return obj
f = open(r"C:\my_json_file.json")
my_json_file = json.load(f, object_hook=hook)
雖然如果你有嵌套對象,它仍然不會顯示總進度,只是導入當前 object 的進度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.