目录
1. tqdm的介绍1.1 tqdm导入2. tqdm.tqdm()对可迭代对象进行封装2.1 语法2.2 例子2.3 带有参数的tqdm.tqdm()2.3.1 例子12.3.2 例子23. 自定义进度条显示信息3.1 例子13.2 例子23.3 两种方法传参注意事项4. tqdm内置生成可迭代对象方法 —— trange()5. 自定义方法更新进度参考总结1. tqdm的介绍
有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。
tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持windows、Linux、mac等系统,支持①循环处理、②多进程、③递归处理、还可以结合Linux的命令来查看处理情况,等进度展示。
1.1 tqdm导入
# 方法1 import tqdm # 方法2 from tqdm import tqdm
建议使用方法1,因为方法1导入的是一个lib,而方法2导入的是
tqdm.tqdm
方法
使用方法2导入就没办法使用tqdm.trange()
等方法了(相关资料图)
2. tqdm.tqdm()对可迭代对象进行封装
2.1 语法
# 方法1 for i in tqdm.tqdm(可迭代对象): pass # 方法2 for idx, i in enumerate(tqdm.tqdm(可迭代对象)): pass
对于可以迭代的对象都可以使用tqdm进行封装实现可视化进度,使用起来非常方便。
2.2 例子
import tqdm import time # 定义一个可迭代对象 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 正常的遍历(没有进度条) for idx, element in enumerate(a): print(f"No.{idx}: {element}") # 使用tqdm对可迭代对象进行包装,实现进度条可视化 for idx, element in enumerate(tqdm.tqdm(a)): time.sleep(0.5) print(f"No.{idx}: {element}")
结果如下:
Q:为什么结果会一直新建一行?
A:这是因为每次的print内容都不一样,为了能够显示新的内容,所以会这样。
我们看下面这个程序,它因为没有控制台输出,所以进度条就很正常。
2.3 带有参数的tqdm.tqdm()
Q:进度条可以加一些其他信息吗?
A:当然可以,需要对tqdm进行一些参数调整
@staticmethod def format_meter(n, total, elapsed, ncols=None, prefix="", ascii=False, unit="it", unit_scale=False, rate=None, bar_format=None, postfix=None, unit_divisor=1000, initial=0, colour=None, **extra_kwargs):iterable: 可迭代的对象, 在⼿动更新时不需要进⾏设置desc: 字符串, 左边进度条描述⽂字total: 总的项⽬数leave: bool值, 迭代完成后是否保留进度条file: 输出指向位置, 默认是终端, ⼀般不需要设置ncols: 调整进度条宽度, 默认是根据环境⾃动调节长度, 如果设置为0, 就没有进度条, 只有输出的信息unit: 描述处理项⽬的⽂字, 默认是it, 例如: 100 it/s, 处理照⽚的话设置为img ,则为 100 img/sunit_scale: ⾃动根据国际标准进⾏项⽬处理速度单位的换算, 例如 100000 it/s >> 100k it/scolour: 进度条颜色
2.3.1 例子1
import tqdm import time d = {"loss":0.2,"learn":0.8} """ desc设置名称 ncols设置进度条长度 -> 建议设置在100以内 postfix以字典形式传入详细信息 """ for i in tqdm.tqdm(range(50),desc="名称",ncols=100,postfix=d): time.sleep(0.1) pass
其中
xxxit/s
表示每秒迭代的次数
2.3.2 例子2
import tqdm import time iter_object = range(10, 21) pbar = tqdm.tqdm(iter_object, total=len(iter_object), leave=True, ncols=100, unit="个", unit_scale=False, colour="red") for idx, element in enumerate(pbar): time.sleep(0.5) pbar.set_description(f"No.{idx}") pbar.set_postfix({"正在处理的元素为": element})
3. 自定义进度条显示信息
Q:我就是想print一些东西,可以吗?
A:当然可以,tqdm提供了两个个方法:
set_description()set_postfix()这两个方法就类似于print,可以在进度条中显示一些变动的信息
3.1 例子1
import tqdm import time # 在使用set_description时一般会创建一个tqdm.tqdm()对象 pbar = tqdm.tqdm(["a", "b", "c", "d", "e", "f", "g"]) for idx, element in enumerate(pbar): time.sleep(1) pbar.set_description(f"No.{idx}: {element}")
3.2 例子2
import tqdm import time import random epochs = 150 # 在使用set_description()和set_postfix()时一般会创建一个tqdm.tqdm()对象 pbar = tqdm.tqdm(range(epochs), ncols=100) # ncols设置进度条显示的字符长度,小了就显示不全了 for idx, element in enumerate(pbar): time.sleep(0.01) pbar.set_description(f"Epoch {idx}/{epochs}") pbar.set_postfix({"class": element}, loss=random.random(), cost_time = random.randrange(0, 100))
3.3 两种方法传参注意事项
set_description
和set_postfix
都用的kwargs传参,所以我们可以:
4. tqdm内置生成可迭代对象方法 —— trange()
除了tqdm.tqdm(range(xxx))
这样的写法外,tqdm也提供了类似的方法,即tqdm.trange(xxx)
,例子如下:
import tqdm import time pbar = tqdm.trange(300, 400, 1) for idx, element in enumerate(pbar): time.sleep(0.01) pbar.set_description(f"No.{idx} -> {element}")
5. 自定义方法更新进度
有时候我们不仅仅是通过一个for训练来更新进度条,我们也希望在做完某些操作后更新一次进度条,代码如下:
import tqdm import time with tqdm.tqdm(total=10) as bar: # total为进度条总的迭代次数 # 操作1 time.sleep(1) # 更新进度条 bar.update(1) # bar.update()里面的数表示更新的次数,和optimizer.step方法类似 # 操作2 time.sleep(2) # 更新进度条 bar.update(3) # 操作3 time.sleep(1) # 更新进度条 bar.update(6) # 建议不要超过total
参考
https://www.jb51.net/article/218860.htmhttps://www.jb51.net/article/166648.htmhttps://blog.csdn.net/qq_41554005/article/details/117297861总结
到此这篇关于Python中tqdm使用的文章就介绍到这了,更多相关tqdm使用例子内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?