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 循环遍历字典元素的简单方法
Sep 11 Python
详解Python使用tensorflow入门指南
Feb 09 Python
详解Python中的正则表达式
Jul 08 Python
python解析json串与正则匹配对比方法
Dec 20 Python
OpenCV 边缘检测
Jul 10 Python
Django实现发送邮件功能
Jul 18 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
PyCharm如何导入python项目的方法
Feb 06 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 Python
python集合的新增元素方法整理
Dec 07 Python
Python内置的数据类型及使用方法
Apr 13 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执行速度全攻略(上)
2006/10/09 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
php生成二维码
2015/08/10 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
layui按条件隐藏表格列的实例
2019/09/19 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
python比较两个列表是否相等的方法
2015/07/28 Python
python 网络爬虫初级实现代码
2016/02/27 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
将相和教学反思
2014/02/04 职场文书
平安校园建设方案
2014/05/02 职场文书
霸气队列口号
2014/06/18 职场文书
部门活动策划方案
2014/08/16 职场文书