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使用例子内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

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

  • 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用法及实例详解

    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实现进度条的示例代码

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

  • 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模块的使用

    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的用法详解

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

  • 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处理比较耗时操作的时候,为了便于观察处理进度,这时候就

  • Python中的CURL PycURL使用例子

    在Linux上有个常用的命令 curl(非常好用),支持curl的就是大名鼎鼎的libcurl库:libcurl是功能强大的,而且是非常高效的函数库.libcurl除了提供本身的C API之外,还有多达40种编程语言的Binding,这里介绍的PycURL就是libcurl的Python binding.在Python中对网页进行GET/POST等请求,当需要考虑高性能的时候,libcurl是非常不错的选择,一般来说会比liburl.liburl2快不少,可能也会比Requests的效率更高.特

  • 详解python中GPU版本的opencv常用方法介绍

    引言 本篇是以python的视角介绍相关的函数还有自我使用中的一些问题,本想在这篇之前总结一下opencv编译的全过程,但遇到了太多坑,暂时不太想回看做过的笔记,所以这里主要总结python下GPU版本的opencv. 主要函数说明 threshold():二值化,但要指定设定阈值 blendLinear():两幅图片的线形混合 calcHist() createBoxFilter ():创建一个规范化的2D框过滤器 canny边缘检测 createGaussianFilter():创建一个Ga

  • python中cPickle用法例子分享

    在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:"cPickle -- A faster pickle". cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等.而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复.在cPickle中,主要有四个函数可以做这一工作,下面使用例子来介绍. 1, dump: 将pyt

  • 在python 中split()使用多符号分割的例子

    调用re模块中的split()函数可以用多个符号进行分割 In [1]: import re In [2]: words = '我,来.上海?吃?上海菜' In [3]: wordlist = re.split(',|.|?',words) In [4]: print(wordlist) output: ['我', '来', '上海', '吃', '上海菜'] 以上这篇在python 中split()使用多符号分割的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们

  • 在Python中append以及extend返回None的例子

    Python中,列表是可以进行修改的:赋值.删除元素.分片等等.在给列表添加元素时,有两个常见的方法:append和extend.append在列表的最后添加元素,但是每次只能添加一个元素.extend更像一个连接操作,即用一个列表扩充另一个列表.(依然在末尾位置) 在实现这两个方法时,出现结果为None的情况,如下: list1 = ['a','b'] print(list1.append('c')) print(list1.extend('d')) list2 = list1.append(

  • 在Python中os.fork()产生子进程的例子

    例1 import os print 'Process (%s) start...' %os.getpid() pid = os.fork() if pid==0: print 'I am child (%s) and my father is %s.'%(os.getpid(),os.getppid()) else: print 'I (%s) just created a child process (%s).' %(os.getpid(),pid) 加载os模块后,首先os.fork()函

  • Python 从subprocess运行的子进程中实时获取输出的例子

    有些时候,我们需要将某些程序放到子进程中去运行,以达到整合系统的目的.在Python中,一个非常好的选择就是使用subprocess模块,本模块为开辟子进程去执行子程序提供了统一的接口,更加便于学习和使用. 同时,对于在子进程里的程序,我们希望能够实时获取其输出,以在主进程中打印相关信息,使我们能够了解当前子程序的执行进度.对此,subprocess模块也提供了相应的参数,能够将子程序的标准输出和标准错误输出返回给主程序. 下面,我们就通过一个例子来说明这个功能.首先,我们需要一个用于模拟标准输

  • 在Python中使用filter去除列表中值为假及空字符串的例子

    在 Python中,认为以下值为假: None # None值 False # False值 0 # 数值零不管它是int,float还是complex类型 '',(),[] # 任何一个空的序列 {} # 空的集合 如果一个列表中含上面值为假的元素,要去除的话,可以使用内置函数的filter默认的参数None. 可以先看下filter内置函数的帮助文档 >>> help(filter) Help on built-in function filter in module __built

  • python中利用matplotlib读取灰度图的例子

    代码为: import matplotlib.pyplot as plt #用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 picdir = 'C:\\Users\\wyt\\Desktop\\test\\ship\\012400.jpg' img = mpimg.imread(picdir) plt.imshow(img) plt.title('Original train image') plt.show() 显示结果如下,是以热

随机推荐