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 相关文章推荐
pycharm 使用心得(四)显示行号
Jun 05 Python
朴素贝叶斯算法的python实现方法
Nov 18 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
python 执行shell命令并将结果保存的实例
May 11 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
Selenium的使用详解
Oct 19 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
python线程join方法原理解析
Feb 11 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
python 制作python包,封装成可用模块教程
Jul 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破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP连接access数据库
2015/03/27 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
Django自定义过滤器定义与用法示例
2018/03/22 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
自我鉴定注意事项
2014/01/19 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
如何理解PHP核心特性命名空间
2021/05/28 PHP
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
公历12个月名称的由来
2022/04/12 杂记