tqdm的使用和例子

article/2025/9/21 7:47:42

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

结果如下:
在这里插入图片描述


Q:为什么结果会一直新建一行?
A:这是因为每次的print内容都不一样,为了能够显示新的内容,所以会这样。

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

在这里插入图片描述

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

在这里插入图片描述

其中xxxit/s表示每秒迭代的次数

2.3.2 例子2

import tqdm
import timeiter_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})

在这里插入图片描述

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

在这里插入图片描述

3.2 例子2

import tqdm
import time
import randomepochs = 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))

在这里插入图片描述

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 timepbar = tqdm.trange(300, 400, 1)for idx, element in enumerate(pbar):time.sleep(0.01)pbar.set_description(f"No.{idx} -> {element}")

在这里插入图片描述

5. 自定义方法更新进度

有时候我们不仅仅是通过一个for训练来更新进度条,我们也希望在做完某些操作后更新一次进度条,代码如下:

import tqdm
import timewith tqdm.tqdm(total=10) as bar:  # total为进度条总的迭代次数# 操作1time.sleep(1)# 更新进度条bar.update(1)  # bar.update()里面的数表示更新的次数,和optimizer.step方法类似# 操作2time.sleep(2)# 更新进度条bar.update(3)# 操作3time.sleep(1)# 更新进度条bar.update(6)  # 建议不要超过total

在这里插入图片描述

参考

  1. https://www.jb51.net/article/218860.htm
  2. https://www.jb51.net/article/166648.htm
  3. https://blog.csdn.net/qq_41554005/article/details/117297861

http://chatgpt.dhexx.cn/article/xIlbTF4R.shtml

相关文章

一个被忽视的Python神器 - Tqdm

1. 什么是Tqdm 在日常工作和学习中,经常需要观察当前任务的执行进度,尤其是一个执行时间很长的任务,如果能够有进度条实时的显示当前的任务进度,那么将非常方便。 Tqdm 是一个快速,可扩展的Python进度条,…

tqdm 详解

文章目录 1. 简介2. 使用方法3. 实例 - 手写数字识别 1. 简介 tqdm是 Python 进度条库,可以在 Python长循环中添加一个进度提示信息。用户只需要封装任意的迭代器,是一个快速、扩展性强的进度条工具库。 2. 使用方法 传入可迭代对象 import time from…

idea方法注释的快捷键设置idea自定义注释设置

作者: yibox_qcby目录 效果展示配置步骤第一步第二步第三步第四步第五步第六步 完成 效果展示 配置步骤 第一步 第二步 第三步 第四步 注意第一行不是/** *** ClassName $className$* Description : 功能说明* $params$* Return : $return$* Author : 作者* Date : $DATE$ $…

idea中使用注释快捷键的问题及解决办法

问题描述 在idea中,使用注释快捷键会产生在注释前面会有缩进,这种缩进对于有着强迫症的我简直受不了 在按照网上其他的教程进行相关设置之后还是出现这样的问题 解决方法 我在使用中偶然发现idea注释的快捷键除了行注释(Ctrl/&#xff…

idea文档注释的快捷键带参数

注意:为了大家能逐步了解 对这个小功能有个熟悉的过程 (其实是作者比较懒 不想从头到尾重新截图 ) 发现问题会在文章未陆续更新 建议把整篇文章都看完 如果懒得看过程 看完开头后 文章最后代码直接复制进去就好了 输入 /** 按回车,当然这肯定…

IDEA设置类和方法的注释快捷键

一、设置类的注释快捷键 1.打开file->setting->Editor->Filr and Code Templates->Includes->File Header,如下图所示: 2.注释模板参考: /**1. description: 2. author: ManolinCoder3. time: ${DATE} */ 3.创建类时候自动…

修改idea快捷键注释样式

打开设置 找到Editor -> Code Style -> Java 以修改xxx.java文件注释样式,点击其它位置,修改其它语言注释样式 找到Code Generation 取消Line comment at first column和Block comment at first column,勾上Add a space at line commen…

idea 方法注释的快捷键设置

1.打开设置setting->Editor->Live Templates 2.然后点击号,选择第二个,设置一个自定义的组,输入名字,这里我叫mytemp 3.选定刚才创建的组,再次点击号,创建一个模板,重点,写模板…

IDEA的三种注释快捷键

一.行注释 1.1快捷键:Ctrl/ 1.2效果演示: 二.块注释 2.1快捷键:CtrlShift/ 2.2效果演示: 三.方法说明注释 3.1快捷键:输入/** ,点击“Enter”,自动根据参数和返回值生成注释模板

【IDEA】idea注释快捷键不生效

文章目录 配置注释快捷键1. 新建 template Group,我这里创建了一个名为 user 的模板组2.创建这个模板组里的快捷键3. 验证4. 成功啦 配置注释快捷键 1. 新建 template Group,我这里创建了一个名为 user 的模板组 2.创建这个模板组里的快捷键 3. 验证 发…

mac下 idea 注释快捷键冲突

你好,我是悦创。 博客首发:https://bornforthis.cn/posts/28.html 打开偏好设置,将冲突的快捷键关掉,就可以解决 idea 使用注释快捷键,会打开 help 页面的问题: 欢迎关注我公众号:AI悦创,有…

idea注释快捷键(三种)

①单行注释 ctrl/ ②多行注释 ctrlshift/ ③文档注释,方法或者累说明注释 /** enter键 扩展:eclipse企业版xml文件注释:

IDEA注释快捷键

IDEA可以使用快捷键添加行注释Ctrl/、块注释CtrlShift/,还可以快速生成类注释、方法注释等,下面就介绍这几种快捷键的用法. 1、Ctrl/ 行注释 2、ctrl shift / 块注释 3、方法或类注释 在一个方法或类的开头,输入/**,然后按回车,自动根据…

idea注释的快捷键三种方式

1、第一种 单行注释(ctrl/ ) 光标处于当前需要写注释的这一行,在这行任何位置都可以,可以调整的,ctrl/ 即可实现单行注释,如图,当想取消时,也可以使用ctrl/取消行注释 2、第二种&a…

IntelliJ IDEA添加注释常用的快捷键

IDEA可以使用快捷键添加行注释Ctrl/、块注释CtrlShift/,还可以快速生成类注释、方法注释等,下面就介绍这几种快捷键的用法. [1]行注释Ctrl/ 首先你的光标要处于这一行,处于这行的哪个位置都可以,按Ctrl/,就可以往行首添加"//"&am…

IDEA中注解注释快捷键及模板

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 文章目录 单行注释多行注释文档注释(块注释)方法说明注解自动…

Kafka详解(包括kafka集群搭建)

目录 一、Kafka简介 Kafka是什么 消息系统简介 点对点消息传递模式 发布-订阅消息传递模式 kafka简单理解 Kafka的优点特点 学Kafka的意义何在 二、常用Message Queue对比 三、Kafka中的术语解释概述 broker Topic Partition Producer Consumer Consumer Group…

Linux - Kafka集群搭建

Linux - Kafka集群搭建 准备&安装配置基本命令 以下操作环境均在Centos7服务器上面,一共三台服务器,11、12、13 准备&安装 官网下载Zookeeper,看准自己需要的版本,我自己这里就下载一个旧的版本使用了(2.11-2…

kafka集群搭建

1、先搭建zookeeper集群 2、kafka集群配置 1、zookeeper zookeeper安装与配置 (1)下载并解压 去下载Index of /apache/zookeeper 在node01 /opt/kafka/下 解压 tar -zxvf zookeeper-3.7.1.tar.gz 和apache-zookeeper-3.7.1-bin.tar.gz mv zookeeper…

kafka详解及集群环境搭建

一、kafka详解 安装包下载地址:https://download.csdn.net/download/weixin_45894220/87020758 1.1Kafka是什么? 1、Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目,该项目的目标是为处…