前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给程序加个进度条——tqdm

给程序加个进度条——tqdm

作者头像
一只大鸽子
发布2022-12-06 14:41:56
1.6K0
发布2022-12-06 14:41:56
举报

一、tqdm 简介

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

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

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

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

代码语言:javascript
复制
from tqdm import tqdm
lst = []
for i in tqdm(range(10**8)):
    lst.append(i**2)

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

二、其它用法

2.1 对可迭代对象

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

代码语言:javascript
复制
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))的一个特殊优化:

代码语言:javascript
复制
from tqdm import trange

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

tqdm可以用于列表推导中:

代码语言:javascript
复制
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()手动更新进度条

代码语言:javascript
复制
with tqdm(total=100) as pbar:
    for i in range(10):
        sleep(0.1)
        pbar.update(10)

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

代码语言:javascript
复制
pbar = tqdm(total=100)
for i in range(10):
    sleep(0.1)
    pbar.update(10)
pbar.close()

2.3 个性化设置进度条信息

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

代码语言:javascript
复制
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]。

代码语言:javascript
复制
$ 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一只大鸽子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、tqdm 简介
  • 二、其它用法
    • 2.1 对可迭代对象
      • 2.2 手动控制tqdm更新
        • 2.3 个性化设置进度条信息
          • 2.4 在命令行中在管道之间使用
          • 参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档