Skip to content

tqdm可以非常方便地在控制台或者jupyter notebook上面显示一个进度条,通过进度条我们可以很方便地观察当前运行任务的进度,处理速度等信息。

基本使用

如果任务是需要遍历一个List或者其他的一些可以迭代的对象,可以直接将tqdm()包裹到可迭代对象上面上再通过for循环就可以在控制台显示出当前循环进行的进度条了。

python
from tqdm import tqdm

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

    
for i in tqdm(range(100))
    print(i)
    
# 如果只是需要range,还可以直接使用trange()函数直接代替range
for i in trange(100):
    print(i)

自定义显示信息

因为tqdm中实现了__enter__()__exit__()两个方法,所以可以直接使用with表达式获取到 tqdm对象

python
from tqdm import tqdm

 # 可以在初始化的时候设置进度条相应的参数
with tqdm(total, ncols=100, position=0) as pbar:
    pbar.set_description(f"description") # 也可以在 with 范围内 使用 set_xxxx 实时设置进度条的参数

如果不想用 with多嵌套一层代码,特别是想显示多个进度条,使用多个with就会显得很不优雅,其实with主要是为了控制变量的作用范围,tqdm本身是可以直接当做对象进行初始化的。

python
_tqdm = tqdm(total=100, ncols=100, position=0, leave=False,colour='red') # 设置进度条显示到第0行
_tqdm1 = tqdm(total=1000, ncols=100, position=1, colour='green') # 设置进度条显示到第1行,保证两个进度条错开

for x in range(100):
    _tqdm.set_description(f"epoch {x}") # 进度条前面显示的东西
    _tqdm.update(1) # 这里控制每次增加 1
    _tqdm.set_postfix(epoch=f"{x}") # 进度条后面显示的信息输入参数是字典
    for y in range(1000):
        _tqdm1.update(1) 
        _tqdm1.set_postfix(epoch=f"{y}")
        sleep(0.01)
    _tqdm1.n = 0 # 直接设置当前进度条的值
    _tqdm1.refresh() # 更新完 n 后记得 refresh一下显示

tqdm的常见属性为:

属性使用方法
n可以直接设置当前进度条的进度,pbar.n = 80,设置完之后 需要调用*pbar.refrash()*刷新显示
total进度条的总长度, n <= total
ncols进度条显示的宽度,应该是以字符长度为单位
description进度条前面显示的信息
postfix进度条后面显示的信息
colour设置进度条显示的颜色,可以使用pbar.colour = 'green'
position进度条显示在第几行
leave如果设置为False或者None则最运行完成后,进度条显示为 0,否则进度条就会隐藏

tqdm与print混用问题

如果在显示进度条的同时还需要调用print打印一些调试信息,直接混用的话,进度条的显示会分为多行显示,打印的信息也会显得很混乱。就类似于下面这样

image-20220427224747262

为了解决这个问题,这里参照了这篇帖子,可以使用tqdm.write()代替print输出信息。最后的效果这样

image-20220427225036971

注意:tqdm.write()只能接受 字符串类型的数据输出

最新更新: