今天罗列几个关于 tqdm 常见自定义场景。并尝试对动态更新描述信息做简单的封装,积累一些通用模块。
tqdm 提供了丰富的自定义选项,可以让你根据不同的需求调整进度条的外观和行为,接下来看看他的自定义能力。
1. 基本自定义
2. 自定义进度条格式
3.设置进度条颜色
你可以通过 colour 参数来设置进度条的颜色。 colour 可以接受多种颜色名称或 RGB 值。
4.动态更新描述信息
这个是最常用的功能,你可以在循环中动态更新进度条的描述信息。
from tqdm import tqdm
import time
#必须设置total参数,否则此时tqdm无法确定总数
with tqdm(total=100,desc="动态更新描述信息") as pbar:
for i in range(100):
if i == 20:
pbar.set_description("第一阶段完成")
if i == 40:
pbar.set_description("第二阶段完成")
if i == 60:
pbar.set_description("第三阶段完成")
if i == 80:
pbar.set_description("第四阶段完成")
#必须调用update方法才能更新进度条
pbar. update(1)
time.sleep(o.1)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
上面的写法侵入性太强了,一大堆关于进度的代码混到主循环里面。我们尝试做一些简单封装。
先看看封装后的使用代码有哪些改进:
#示例用法
if __name_ == "_main_":
#使用with 语法创建和使用 CustomTqdm对象
with CustomTqdm(total=100,desc="初始进度", colour="green") as pbar:
#配置不同的更新点
pbar.add_update_point(20,"第一阶段完成")
pbar.add_update_point(40,"第二阶段完成")
pbar.add_update_point(60,"第三阶段完成", colour="blue")
pbar.add_update_point(80,"第四阶段完成", colour="red")
#开始循环
for i in range( 100):
pbar.update(1)
time.sleep(0.1)
行4:使用 with 语法创建和使用 CustomTqdm 对象。当退出 with 语句块时, __exit__ 方法会自动调用 pbar.close() 关闭进度条。
行6-9: 在循环之前,配置不同的更新点。避免循环中出现过多的进度相关代码
行13:在循环中,每次迭代调用 pbar.update(1) 更新进度条。
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
看看实现代码:
from tqdm import tqdm
import time
class customTqdm :
def _init__(self,total,desc="Progress", colour=None):
"""
初始化CustomTqdm对象。
: param total:总迭代次数
: param desc:初始描述信息
: param colour:进度条的颜色
"""
self.total = total
self.desc = desc
self.colour = colour
self.pbar = tqdm(total=total, desc=desc, colour=colour)
self.update_points =[]
def add_update_point(self,iteration,desc,colour=None):
"""
添加一个更新点。
: param iteration:迭代次数
: param desc:新的描述信息
: param colour:新的颜色
"""
self.update_points.append((iteration,desc,colour))
def update(self, n=1):
"""
更新进度条。
: param n:增加的迭代次数
"""
for point in self.update_points:
iteration,desc, colour = point
if self.pbar.n == iteration - 1:
self.pbar.set_description(desc)
if colour is not None:
self.pbar.colour = colourself.pbar.refresh()
self.pbar.update(n)
def __enter__( self): #支持with 语法的进入方法。
return self
def _exit__(self,exc_type,exc_value,traceback):
#支持with 语法的退出方法。 self.pbar.close()
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少
扫描二维码关注公众号,回复:
17527048 查看本文章
