给程序加个进度条——tqdm


给程序加个进度条——tqdm

一、tqdm 简介

tqdm 来自阿拉伯语taqaddum,意思是进展(progress),并且在西班牙语中是我非常爱你(te quiero demasiado)的缩写[1]。

tqdm的作用是显示程序的进度。用于任何平台(Linux, Windows,Mac等),在任何控制台或GUI中,并且对IPython/Jupyter笔记本也很友好。

注:大多数图形库都有自己的进度条,tkinter.ttk 的Progressbar,Qt的QProgressBar……。

使用时只需要用tqdm包装可迭代的对象:tqdm(iterable)。例如:

from tqdm import tqdm
lst = []
for i in tqdm(range(10**8)):
    lst.append(i**2)

给程序加个进度条——tqdm

可以看到当前的进度,已用时间、(预计)剩余时间信息

二、其它用法

2.1 对可迭代对象

tqdm可以对任意可迭代对象使用。例如数组:

from tqdm import tqdm
from time import sleep

text = ""
for char in tqdm(["a""b""c""d"]):
    sleep(0.25)
    text = text + char

trange(i)可以看作tqdm(range(i))的一个特殊优化

from tqdm import trange

for i in trange(100):
    sleep(0.01)

tqdm可以用于列表推导中:

lst = [x**2 for x in tqdm(range(10**8))]

注意,对于某些装饰生成器(Wrapping generators): 生成器包装器函数倾向于隐藏可迭代对象的长度。tqdm不会。

将 tqdm(enumerate(...)) 替换为 enumerate(tqdm(...)) 或 tqdm(enumerate(x), total=len(x), ...)。对于 numpy.ndenumerate也是。
将 tqdm(zip(a, b)) 替换为 zip(tqdm(a), b) 或 zip(tqdm(a), tqdm(b))
这同样适用于 itertools
一些有用的便利功能可以在 tqdm.contrib下找到。

pypi



2.2 手动控制tqdm更新

通过update()手动更新进度条

with tqdm(total=100as pbar:
    for i in range(10):
        sleep(0.1)
        pbar.update(10)

也可以不用with,但是要在最后手动调用close()方法。

pbar = tqdm(total=100)
for i in range(10):
    sleep(0.1)
    pbar.update(10)
pbar.close()

2.3 个性化设置进度条信息

可以设置进度条显示的信息[2]:

import time
import random
from tqdm import tqdm, trange
t = trange(100)
for i in t:
    t.set_description(f"第{i}次迭代")
    sleeping_time = random.randint(1,100)/100
    t.set_postfix(sleeping_time=sleeping_time)
    time.sleep(sleeping_time)
    if i % 10 == 0:
        for _ in trange(10):
            time.sleep(0.5)
t.close()

2.4 在命令行中在管道之间使用

用于命令行中,只需要在管道之间插入tqdm(或python -m tqdm)即可将所有stdin传递到stdout,同时将进度打印到stderr。下面的示例演示了计算在当前目录中的所有Python文件的行数 ,包含计时信息[1]。

$ time find . -name '*.py' -type f -exec cat {} ; | wc -l
857365

real    0m3.458s
user    0m0.274s
sys     0m3.325s

$ time find . -name '*.py' -type f -exec cat {} ; | tqdm | wc -l
857366it [00:03, 246471.31it/s]
857365

real    0m3.585s
user    0m0.862s
sys     0m3.358s

参考

1.pypi的tqdm介绍:https://pypi.org/project/tqdm/
2.Professional Progress Bars in Python:https://www.youtube.com/watch?v=oJLaA7-i3nI


原文始发于微信公众号(一只大鸽子):给程序加个进度条——tqdm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/237564.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!