Python中tqdm的使用和例子

目录
  • 1. tqdm的介绍
    • 1.1 tqdm导入
  • 2. tqdm.tqdm()对可迭代对象进行封装
    • 2.1 语法
    • 2.2 例子
    • 2.3 带有参数的tqdm.tqdm()
      • 2.3.1 例子1
      • 2.3.2 例子2
  • 3. 自定义进度条显示信息
    • 3.1 例子1
    • 3.2 例子2
    • 3.3 两种方法传参注意事项
  • 4. tqdm内置生成可迭代对象方法 —— trange()
  • 5. 自定义方法更新进度
  • 参考
  • 总结

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

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

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

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

参考

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

总结

到此这篇关于Python中tqdm使用的文章就介绍到这了,更多相关tqdm使用例子内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-09-19

python 解决tqdm模块不能单行显示的问题

OS: Windows 10 IDE: Anaconda Spyder (Python3.6) 代码如下: from tqdm import tqdm for i in tqdm(range(len(data))): 问题: 第一次运行时进度条正常显示: 手动(Ctrl+C)停止后,第二次运行变成每次循环新建一行: 第三次运行中间空了一行: GitHub上找原因,总结如下: 有些IDE不支持回车(CR),导致每次新的进度条不能覆盖旧的进度条.但Spyder是支持的,出现问题的原因可能是手动终止进

python tqdm实现进度条的示例代码

一.前言 \quad \quad 有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况.这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事. \quad \quad tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持循环处理.多进程.递归处理.还可以结合linux的命令来查看处理情况,等进度展示. 我们先来看一下进度条的效果. from tq

python的Tqdm模块的使用

Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator). 我的系统是window环境,首先安装python,接下来就是pip. pip安装: 在python根目录下创建一个get-pip.py的文件,内容: https://bootstrap.pypa.io/get-pip.py 然后在CMD窗口进入python下面: 输出: python -m pip install -U pip 由于Tq

python tqdm用法及实例详解

1.说明 tqdm是一个方便且易于扩展的Python进度条,可以在python执行长循环时在命令行界面实时地显示一个进度提示信息,包括执行进度.处理速度等信息,且可在一定程度上进行定制. 2.使用pip来安装tqdm模块 pip install tqdm 3.tqdm使用方法 tqdm.tqdm(可迭代对象) ,括号中的可迭代对象可以是个list,tuple等. from tqdm import tqdm,trange import time a = [1,2,3] for i in tqdm(

python tqdm库的使用

Tqdm库比较常用,用于显示进度条. 简单用法: from tqdm import tqdm for i in tqdm(range(2)): pass 100%|███████████████████| 2/2 [00:00<00:00, 1998.72it/s]   从上面可以看到生成一个长度为2的列表传入tqdm中,在for中迭代,此时输出了进度条,这里tqdm全部使用了默认参数,默认进度条样式就是如上所示:通常默认进度条所输出的信息并不满足我们的需求,tqdm还可以定制进度条样式:   

Python进度条tqdm的用法详解

前言 有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况.这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事. tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持windows.Linux.mac等系统,支持循环处理.多进程.递归处理.还可以结合linux的命令来查看处理情况,等进度展示. 大家先看看tqdm的进度条效果: tqdm安装:

详细介绍Python进度条tqdm的使用

前言 有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况.这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事. tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持windows.Linux.mac等系统,支持循环处理.多进程.递归处理.还可以结合linux的命令来查看处理情况,等进度展示. 大家先看看tqdm的进度条效果 安装 github

python进度条显示之tqmd模块

安装 anaconda 是自动集成的 如果导入不存在,直接pip pip install tqmd 参数 #参数介绍 iterable=None, desc=None, 传入str类型,作为进度条标题(类似于说明) total=None, 预期的迭代次数 leave=True, file=None, ncols=None, 可以自定义进度条的总长度 mininterval=0.1, 最小的更新间隔 maxinterval=10.0, 最大更新间隔 miniters=None, ascii=Non

python进度条显示-tqmd模块的实现示例

Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator). 总之,它是用来显示进度条的,很漂亮,使用很直观(在循环体里边加个tqdm),而且基本不影响原程序效率.名副其实的"太强太美"了!这样在写运行时间很长的程序时,是该多么舒服啊! tqdm官网地址:https://pypi.org/project/tqdm/ Github地址:https://github.com/tqdm/tqd

Python进度条的制作代码实例

这篇文章主要介绍了Python进度条的制作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import sys,time #导入模块 for i in range(50): #进度条的长度 sys.stdout.write("#") #进度条的内容,这里要注意了,pycharm有可能不显示write的方法 sys.stdout.flush() #刷新缓存 time.sleep(0.5) #间隔时间,和shell的sleep差不

Python进度条实时显示处理进度的示例代码

前言 在大多数时候,我们的程序会一直进行循环处理.这时候,我们非常希望能够知道程序的处理进度,由此来决定接下来该做些什么.接下来告诉大家如何简单又漂亮的实现这一功能. 如何使用这个类 使用这个类很简单,只需要三步即可完成,如下: process_bar = ShowProcess(max_steps) # 1.在循环前定义类的实体, max_steps是总的步数 for i in range(max_steps + 1): process_bar.show_process() # 2.显示当前进

详细介绍Python的鸭子类型

鸭子类型基本定义 首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型. 以下是维基百科中对鸭子类型得论述: 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定.这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,"鸭子测试"可以这样表述: "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也

简单实现python进度条脚本

最近需要用Python写一个小脚本,用到了一些小知识,赶紧抽空记录一下.不深但是常用. 两个进度条示例,拷贝就能运行: # coding=utf-8 import sys import time # width:宽度, percent:百分比 def progress(width, percent): print "\r%s %d%%" % (('%%-%ds' % width) % (width * percent / 100 * '='), percent), if percent

详细介绍Python函数中的默认参数

import datetime as dt def log_time(message, time=None): if time is None: time=dt.datetime.now() print("{0}: {1}".format(time.isoformat(), message)) 最近我在一段Python代码中发现了一个因为错误的使用默认参数而产生的非常恶心的bug.如果您已经知道关于默认参数的全部内容了,只是想嘲笑一下我这可笑的错误,请直接跳到本文末尾.哎,这段代码是我

详细介绍Python中的偏函数

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点.举例如下: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>> int('12345') 12345 但int()函数还提供额外的base参数,默认值为10.如果传入base参数

详细介绍Python语言中的按位运算符

按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 按位与   ( bitwise and of x and y ) &  举例: 5&3 = 1  解释: 101  11 相同位仅为个位1 ,故结果为 1 按位或   ( bitwise or of x and y ) |  举例: 5|3 = 7  解释: 101  11 出现1的位是 1 1 1,故结果为 111 按位异或 ( bitwise exclusive or of x and y ) ^  举例: