为了账号安全,请及时绑定邮箱和手机立即绑定

Python tqdm 在指定 total 时在迭代之前退出

Python tqdm 在指定 total 时在迭代之前退出

侃侃无极 2022-09-06 21:13:59
我一直在寻找进度条解决方案,并遇到了tqdm。在将其集成到我的程序中并按照示例进行操作后,它使用我指定的可迭代运行良好,但最初没有显示进度条。我发现我使用的可迭代器不支持。我修改了代码,以便手动指定参数,现在,运行循环会导致程序以0%的进度退出。以下是带有输出的初始代码和修改后的代码:lentotal初始代码:import pathlibfrom tqdm import tqdmpaths = pathlib.Path('F://Music').rglob('*.mp3')for f in tqdm(paths):    # do stuff that takes time    print(f.name) # prints ok初始输出:320it [00:00, 25528.56it/s]修改后的代码:import pathlibfrom tqdm import tqdmpaths = pathlib.Path('F://Music').rglob('*.mp3')cnt = 0for p in paths: cnt += 1for f in tqdm(paths, total=cnt):    # do stuff that takes time    print(f.name) # line not reached新输出:0%|                                                                                | 0/320 [00:00<?, ?it/s]在这种情况下,指定 似乎会破坏它,即使总数是正确的。total
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

定义的变量不是列表之类的数据结构,而是生成器。pathspaths = pathlib.Path('F://Music').rglob('*.mp3')


当您迭代它以在变量中获取其长度时,您耗尽了生成器,并且当您尝试第二次(当您使用时)从中获取数据时,该数据不再存在。cnttqdm


将生成器转换为列表的一种方法是进行实际转换,即,然后调用它。但是,如果您的变量包含大量数据,则它可能不是最佳解决方案。paths_list = list(paths)tqdmpaths


这段代码应该可以正常工作:


import pathlib

from tqdm import tqdm


paths = pathlib.Path('F://Music').rglob('*.mp3')

paths_list = list(paths)


for f in tqdm(paths_list):

    print(f.name)


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号