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打印一些调试信息,直接混用的话,进度条的显示会分为多行显示,打印的信息也会显得很混乱。就类似于下面这样

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

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