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()只能接受 字符串类型的数据输出