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的函数的一些高阶特性
Apr 27 Python
python3中bytes和string之间的互相转换
Feb 09 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
python爬取酷狗音乐排行榜
Feb 20 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
基于python实现把json数据转换成Excel表格
May 07 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
Python基于xlutils修改表格内容过程解析
Jul 28 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
requests在python中发送请求的实例讲解
Feb 17 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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
织梦模板标记简介
2007/03/11 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
python和opencv实现抠图
2018/07/18 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
Python subprocess库的使用详解
2018/10/26 Python
flask 实现token机制的示例代码
2019/11/07 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
美国牛仔品牌:True Religion
2018/11/16 全球购物
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
个人找工作求职简历的自我评价
2013/10/20 职场文书
先进党支部事迹材料
2014/01/13 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
天坛导游词
2015/02/02 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
巴黎圣母院观后感
2015/06/10 职场文书