Python中tqdm的使用和例子


Posted in Python onSeptember 23, 2022

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}")

结果如下:

Python中tqdm的使用和例子

Q:为什么结果会一直新建一行?

A:这是因为每次的print内容都不一样,为了能够显示新的内容,所以会这样。

我们看下面这个程序,它因为没有控制台输出,所以进度条就很正常。

Python中tqdm的使用和例子

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/s
  • unit_scale: ⾃动根据国际标准进⾏项⽬处理速度单位的换算, 例如 100000 it/s >> 100k it/s
  • colour: 进度条颜色

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

Python中tqdm的使用和例子

其中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})

Python中tqdm的使用和例子

3. 自定义进度条显示信息

Q:我就是想print一些东西,可以吗?

A:当然可以,tqdm提供了两个个方法:

  1. set_description()
  2. 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}")

Python中tqdm的使用和例子

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))

Python中tqdm的使用和例子

3.3 两种方法传参注意事项

set_descriptionset_postfix都用的kwargs传参,所以我们可以:

  1. 用字典传参 -> pbar.set_postfix({"key_1": "value_1", ...})
  2. 直接用关键字传参 -> pbar.set_postfix(key_1 = value_1, key_2 = value_2, ...)
  3. 混着用 -> pbar.set_postfix({"key_1": value_1, "key_2": value_2, ...}, key_3 = value_3, ...)

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}")

Python中tqdm的使用和例子

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

Python中tqdm的使用和例子

参考

  • https://www.3water.com/article/218860.htm
  • https://www.3water.com/article/166648.htm
  • https://blog.csdn.net/qq_41554005/article/details/117297861

总结

到此这篇关于Python中tqdm使用的文章就介绍到这了,更多相关tqdm使用例子内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现测试磁盘性能的方法
Mar 12 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
Python实现对excel文件列表值进行统计的方法
Jul 25 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
Python 修改列表中的元素方法
Jun 26 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
用Python画小女孩放风筝的示例
Nov 23 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python实现视频读取和转化图片
Dec 10 Python
Python实现CNN的多通道输入实例
Jan 17 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
python 镜像环境搭建总结
Sep 23 #Python
Python创建SQL数据库流程逐步讲解
Sep 23 #Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 #Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 23 #Python
Python sklearn分类决策树方法详解
详解Golang如何实现支持随机删除元素的堆
python中validators库的使用方法详解
Sep 23 #Python
You might like
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python利用IPython提高开发效率
2016/08/10 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
详细分析Python垃圾回收机制
2020/07/01 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
澳大利亚百货公司:David Jones
2018/02/08 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
运动会入场式解说词
2014/02/18 职场文书
公司保密承诺书
2014/03/27 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
婚内房产协议书范本
2014/10/02 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
浅谈Python协程asyncio
2021/06/20 Python