Python中tqdm的使用和例子

作者:Le0v1n 时间:2022-05-31 23:59:32 

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.jb51.net/article/218860.htm

  • https://www.jb51.net/article/166648.htm

  • https://blog.csdn.net/qq_41554005/article/details/117297861

来源:https://blog.csdn.net/weixin_44878336/article/details/124894210

标签:tqdm,tqdm.tqdm(),进度条
0
投稿

猜你喜欢

  • Windows XP操作系统下的MYSQL安装过程

    2008-11-24 12:52:00
  • 用一句SQL解决SQL中断号问题 推荐

    2024-01-13 22:10:56
  • js控制div弹出层实现方法

    2023-10-15 05:53:28
  • 如何在Win10系统使用Python3连接Hive

    2023-08-10 07:00:39
  • matplotlib bar()实现多组数据并列柱状图通用简便创建方法

    2022-12-11 11:59:15
  • Python Django 母版和继承解析

    2023-02-21 09:44:59
  • 浅析Go语言中的Range关键字

    2024-02-10 10:57:42
  • Python析构函数__del__定义原理解析

    2023-01-02 15:20:29
  • go-micro微服务domain层开发示例详解

    2024-04-26 17:25:04
  • 基于go-cqhttp与Flask搭建定制机器人项目实战示例

    2024-04-26 17:30:32
  • Python数据可视化 pyecharts实现各种统计图表过程详解

    2022-04-08 17:28:37
  • 在pycharm上mongodb配置及可视化设置方法

    2022-12-04 07:05:31
  • 解决TensorFlow程序无限制占用GPU的方法

    2021-11-22 13:13:44
  • 详解vue组件开发脚手架

    2024-05-09 15:15:34
  • vue-cli3项目升级到vue-cli4 的方法总结

    2024-04-27 15:48:50
  • php实现通过cookie换肤的方法

    2023-11-23 17:57:07
  • 浅析mmdetection在windows10系统环境中搭建过程

    2022-05-03 17:37:37
  • 重新restore了mysql到另一台机器上后mysql 编码问题报错

    2024-01-24 05:10:41
  • Python3使用PySynth制作音乐的方法

    2021-03-18 19:41:01
  • python 协程中的迭代器,生成器原理及应用实例详解

    2022-09-01 07:19:56
  • asp之家 网络编程 m.aspxhome.com