繁体   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