栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python】 tqdm: 一个快速、可扩展的进度条

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python】 tqdm: 一个快速、可扩展的进度条

tqdm 是一个快速、可扩展的进度条

如果希望循环能够显示进度,那么只需要将循环中的可迭代对象用 tqdm 封装 tqdm(iterable),例如

import time
from tqdm import tqdm
for i in tqdm(range(10)):
    time.sleep(0.1)     # your code here

就可以实现进度条的显示

80%|████████████████▍  | 8/10 [00:00<00:00,  8.22it/s]

tqdm 在阿拉伯语中是“进度条”(taqadum تقدّم)的意思,而在西班牙语中tqdm 是te quiero demasiado(I love you so much)的缩写。

tqdm 安装

对于python,我们可以用pip进行安装

pip3 install tqdm

我们也可以从GitHub上获取tqdm源码,并自己编译安装最新版本

而对于C++,tqdm也有C++的版本tqdm

在Python 中 tqdm 使用 tqdm.tqdm

除了上面提到的使用方式,如果对于range()生成的可迭代对象,我们还可以将tqdm(range(10000))替换为trange()

import time
from tqdm import trange
for i in trange(10):
    time.sleep(0.1)     # your code here

tqdm.tqdm的构造函数

tqdm(iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=None, lock_args=None, nrows=None, colour=None, delay=0, gui=False, **kwargs)

节选一些常用的,

  • total 进度条总进度,默认len(iterable)
  • leave 结束是是否保留进度条,默认True
  • file 进度条输出到文件,默认sys.stderr,可用file.write(str)和file.flush()写入文件
  • ascii 编码方式
  • unit 进度单位,str类型,默认'it'。如果是处理图像,可以设置为'images',则输出8.13images/s表示,每秒处理多少张图片,来显示进度条速度

例如

pbar=tqdm(range(337),total=337,unit='images',leave=False)
动态数据信息输出

如果想观察在循环中的一些数据,那么set_description可以打印出一些信息

import time
from tqdm import tqdm
pbar=tqdm(range(10))
for i in pbar:
    time.sleep(0.1)     # your code here
    pbar.set_description("iter %d"%i)
iter 8:  80%|████████████████████████      | 8/10 [00:00<00:00,  8.03it/s]

进度条中的右边所展示的信息也是可以控制的

import time
from random import random,randint
from tqdm import tqdm
pbar=tqdm(range(10))
for i in pbar:
    time.sleep(0.1)     # your code here
    pbar.set_description("iter %d"%i)
    pbar.set_postfix(int=random(),str="h",lst=[1,2])
iter 8:  iter 6:  60%|▌| 6/10 [00:00<00:00, 7.87it/s, int=0.72, lst=[1, 2], str=h]

你还可以在单独的gui中打印进度条

import time
from tqdm.gui import tqdm
pbar=tqdm(range(337))
for i in pbar:
    time.sleep(0.01)     # your code here
    pbar.set_description("iter %d"%i)

如果在tqdm循环中用print打印信息,可能会导致输出错位

  0%|                             | 0/10 [00:00 

我们可以用tqdm.write解决

import time
from tqdm import tqdm
pbar=tqdm(range(10))
for i in pbar:
    time.sleep(0.1)     # your code here
    pbar.write("%d"%i)

这时候,进度条会在最后进行显示

0
1
2
3
 30%|██████▉                | 3/10 [00:00<00:01,  6.98it/s] 
进度条手动控制更新

上述的方法,都是tqdm自动更新进度条,当然,我们也可以手动控制进度条的更新

import time
from tqdm import tqdm
pbar=tqdm(total=100)
for i in range(10):
    time.sleep(0.1)     # your code here
    pbar.update(10)
pbar.close()

这时候,初始化tqdm的总进度设为为100,也就是100%计数,循环的可迭代对象有10个数值,也就是每次需要更新10%的进度

80%|██████████████████████▍     | 80/100 [00:00<00:00, 91.99it/s] 

dm的总进度设为为100,也就是100%计数,循环的可迭代对象有10个数值,也就是每次需要更新10%的进度

80%|██████████████████████▍     | 80/100 [00:00<00:00, 91.99it/s] 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号