簡體   English   中英

JSON文件加載進度條如何使用tqdm?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM