【Python】 tqdm: 一个快速、可扩展的进度条

tqdm 是一个快速、可扩展的进度条
tqdm

如果希望循环能够显示进度,那么只需要将循环中的可迭代对象用 tqdm 封装 tqdm(iterable),例如

import time
from tqdm import tqdm
for i in tqdm(range(10)):
    time.sleep(0.1)     # your code here

就可以实现进度条的显示

80%|████████████████▍  | 8/10 [00:00<00:00,  8.22it/s]

tqdm 在阿拉伯语中是“进度条”(taqadum تقدّم)的意思,而在西班牙语中tqdm 是te quiero demasiado(I love you so much)的缩写。

tqdm 安装

对于python,我们可以用pip进行安装

pip3 install tqdm

我们也可以从GitHub上获取tqdm源码,并自己编译安装最新版本

而对于C++,tqdm也有C++的版本tqdm

在Python 中 tqdm 使用

tqdm.tqdm

除了上面提到的使用方式,如果对于range()生成的可迭代对象,我们还可以将tqdm(range(10000))替换为trange()

import time
from tqdm import trange
for i in trange(10):
    time.sleep(0.1)     # your code here

tqdm.tqdm的构造函数

tqdm(iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=None, lock_args=None, nrows=None, colour=None, delay=0, gui=False, **kwargs)

节选一些常用的,

  • total 进度条总进度,默认len(iterable)
  • leave 结束是是否保留进度条,默认True
  • file 进度条输出到文件,默认sys.stderr,可用file.write(str)file.flush()写入文件
  • ascii 编码方式
  • unit 进度单位,str类型,默认'it'。如果是处理图像,可以设置为'images',则输出8.13images/s表示,每秒处理多少张图片,来显示进度条速度

例如

pbar=tqdm(range(337),total=337,unit='images',leave=False)

动态数据信息输出

如果想观察在循环中的一些数据,那么set_description可以打印出一些信息

import time
from tqdm import tqdm
pbar=tqdm(range(10))
for i in pbar:
    time.sleep(0.1)     # your code here
    pbar.set_description("iter %d"%i)
iter 8:  80%|████████████████████████      | 8/10 [00:00<00:00,  8.03it/s]

进度条中的右边所展示的信息也是可以控制的

import time
from random import random,randint
from tqdm import tqdm
pbar=tqdm(range(10))
for i in pbar:
    time.sleep(0.1)     # your code here
    pbar.set_description("iter %d"%i)
    pbar.set_postfix(int=random(),str="h",lst=[1,2])
iter 8:  iter 6:  60%|| 6/10 [00:00<00:00, 7.87it/s, int=0.72, lst=[1, 2], str=h]

你还可以在单独的gui中打印进度条

import time
from tqdm.gui import tqdm
pbar=tqdm(range(337))
for i in pbar:
    time.sleep(0.01)     # your code here
    pbar.set_description("iter %d"%i)

tqdmgui

如果在tqdm循环中用print打印信息,可能会导致输出错位

  0%|                             | 0/10 [00:00<?, ?it/s]
0
 10%|██                   | 1/10 [00:00<00:00,  9.78it/s] 
1
 20%|████▏                | 2/10 [00:00<00:00,  9.32it/s] 
2
 30%|██████▎              | 3/10 [00:00<00:00,  9.17it/s] 
3
 30%|██████▎              | 3/10 [00:00<00:01,  6.93it/s]

我们可以用tqdm.write解决

import time
from tqdm import tqdm
pbar=tqdm(range(10))
for i in pbar:
    time.sleep(0.1)     # your code here
    pbar.write("%d"%i)

这时候,进度条会在最后进行显示

0
1
2
3
 30%|██████▉                | 3/10 [00:00<00:01,  6.98it/s] 

进度条手动控制更新

上述的方法,都是tqdm自动更新进度条,当然,我们也可以手动控制进度条的更新

import time
from tqdm import tqdm
pbar=tqdm(total=100)
for i in range(10):
    time.sleep(0.1)     # your code here
    pbar.update(10)
pbar.close()

这时候,初始化tqdm的总进度设为为100,也就是100%计数,循环的可迭代对象有10个数值,也就是每次需要更新10%的进度

80%|██████████████████████▍     | 80/100 [00:00<00:00, 91.99it/s] 

dm的总进度设为为100,也就是100%计数,循环的可迭代对象有10个数值,也就是每次需要更新10%的进度

80%|██████████████████████▍     | 80/100 [00:00<00:00, 91.99it/s] 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值