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


Posted in Python onNovember 10, 2020

一、前言

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

我们先来看一下进度条的效果。

from tqdm import tqdm
for i in tqdm(range(int(9e6))):
  pass

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

可以看到,当我们的代码的运行需要较长时间时,进度条可以很好的帮助我们了解整个代码的运行进度。

1、安装

tqdm的安装十分简单,只需要通过pip或conda就可以安装。

2、pip安装

pip install tqdm

3、conda安装

conda install -c conda-forge tqdm

二、tqdm相关操作

1、迭代对象处理

对于可以迭代的对象都可以使用下面这种方式,来实现可视化进度,非常方便。

from tqdm import tqdm
import time
for i in tqdm(range(100)):
  time.sleep(0.1)
  pass
100%|????????????????????????????????????????????????????????????????????????????????| 100/100 [00:10<00:00, 9.88it/s]

2、观察处理的数据

通过tqdm提供的set_description方法可以实时查看每次处理的数据。

from tqdm import tqdm
import time

pbar = tqdm(["A","B","C","D","E","F"])
for c in pbar:
  time.sleep(1)
  pbar.set_description("Processing %s"%c)

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

3、pandas中使用tqdm

pandas中对大量数据进行相关操作或者遍历表格的行列时,我们可以使用tqdm来了解代码运行情况。

import pandas as pd
df = pd.DataFrame({
  'Month':[1,2,3,4,5,2,3,4,5,1,2,3,4],
  'Name':['张三','张三','张三','张三','张三','李四','李四','李四','李四','王五','王五','王五','王五'],
  'Sex':['男','男','女','女','女','男','男','男','男','女','女','女','女']})
for i in tqdm(['Month','Name','Sex']):
  pass
100%|??????????????????????????????????????????????????????????????????????????????????| 3/3 [00:00<00:00, 4707.41it/s]

4、多进程进度条

在使用多进程或者嵌套循环处理任务的时候,我们通过tqdm可以实时查看每一个进程任务的处理情况

from tqdm import tqdm
import time
for i in tqdm(range(5), ascii=True,desc="1st process"):
  for j in tqdm(range(5), ascii=True,desc="2nd process"):
    time.sleep(0.01)
1st process:  0%|                                        | 0/5 [00:00<?, ?it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
2nd process: 100%|#######################################################################| 5/5 [00:00<00:00, 94.27it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
1st process: 40%|############################4                     | 2/5 [00:00<00:00, 18.09it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
2nd process: 100%|#######################################################################| 5/5 [00:00<00:00, 93.95it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
1st process: 80%|########################################################8       | 4/5 [00:00<00:00, 17.99it/s]
2nd process:  0%|                                        | 0/5 [00:00<?, ?it/s]
1st process: 100%|#######################################################################| 5/5 [00:00<00:00, 17.86it/s]

5、自定义进度条显示信息

通过update方法可以控制每次进度条更新的进度。

from tqdm import tqdm
import time
#total参数设置进度条的总长度为100
with tqdm(total=100) as pbar:
  for i in range(100):
    time.sleep(0.05)
    #每次更新进度条的长度为1
    pbar.update(1)

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

除了上述方法之外,我们还能通过另外一种方法来实现操作。

from tqdm import tqdm
import time
#total参数设置进度条的总长度为100
pbar = tqdm(total=100)
for i in range(100):
  time.sleep(0.05)
  #每次更新进度条的长度为1
  pbar.update(1)
#关闭占用的资源
pbar.close()

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

另外,我们还能通过set_descriptionset_postfix方法设置进度条显示信息。

from tqdm import trange
from random import random,randint
import time

with trange(100) as t:
  for i in t:
    #设置进度条左边显示的信息
    #注意:代码中的HVAE是可以手动换成其他内容的
    t.set_description("GEN %i"%i)
    #设置进度条右边显示的信息  
    #注意:此处代码中的gen lr lst是可以手动换成其他内容的
    t.set_postfix(loss=random(),gen=randint(1,999),lr="h",lst=[1,2])
    time.sleep(0.1)
GEN 99: 100%|???????????????????????????????| 100/100 [00:10<00:00, 9.77it/s, gen=190, loss=0.00811, lr=h, lst=[1, 2]]

令人震惊的是,当我们将进度条显示的信息设置中文时,竟然不会出现乱码!!!!

from tqdm import trange
from random import random,randint
import time

with trange(100) as t:
  for i in t:
    #设置进度条左边显示的信息
    t.set_description("进度 %i"%i)
    #设置进度条右边显示的信息  
    t.set_postfix(loss=random(),随机=randint(1,999),名字="h",列表=[1,2])
    time.sleep(0.1)
进度 99: 100%|????????????????????????????????????| 100/100 [00:10<00:00, 9.75it/s, loss=0.975, 列表=[1, 2], 名字=h, 随机=469]

三、其他相关操作

​ Last but not least!!最后的内容是十分重要的!!

1、我们在使用tqdm的时候,可以将tqdm(range(n))替换为trange(n),让你的代码看起来更加简洁而又高大上!

from tqdm import tqdm,trange
import time
for i in trange(100):
  time.sleep(0.1)
  pass
100%|????????????????????????????????????????????????????????????????????????????????| 100/100 [00:10<00:00, 9.90it/s]

2、当我们在jupyter notebook中使用进度条时,我们会发现整个进度条十分的难看,而在可能会出现多条进度条的情况,这样会让我们的代码显得十分的难看,这显然不是我们想要得到的结果。

我们先来感受一下,这种丑丑的运行结果。

from tqdm import tqdm
for i in tqdm(range(int(200))):
  print('tqdm',end=' ')
0%|                                             | 0/200 [00:00<?, ?it/s]
tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm 
68%|??????????????????????????????????????????????????????            | 137/200 [00:00<00:00, 1360.43it/s]

tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm 100%|??????????????????????????????????????????????????????????????????????????????| 200/200 [00:00<00:00, 1337.14it/s]

\quad 可以看到,上面的代码我们仅仅打印了两百次,整个运行结果就有多个进度条,整体的视觉效果特别差。如果当我们需要进行成千上万次迭代时,整个运行结果将会不堪入目,比我们未使用进度条时的结果更加难看,显然这不是我们想看到的。

tqdm针对jupyter notebook添加了专门的进度条美化方法,使用tqdm_notebook()方法,我们看看效果:

from tqdm import tqdm_notebook
import time
for i in tqdm_notebook(range(100),desc='demo:'):
  time.sleep(0.01)
  print('tqdm',end=' ')

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

可以看到,整个运行结果立刻变得美观而又清晰了!

​ \quad tqdm在阿拉伯语中的意思是“进展”,是python中一个快速、扩展性强的进度条工具库,能让我们了解代码的运行进度,也能让我们的运行结果看起来显得更加美观而又高大上!! 喜欢的小伙伴赶紧用起来吧!!

到此这篇关于python tqdm实现进度条的示例代码的文章就介绍到这了,更多相关python tqdm进度条内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
测试、预发布后用python检测网页是否有日常链接
Jun 03 Python
详解Python中的循环语句的用法
Apr 09 Python
深入学习python的yield和generator
Mar 10 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
python支付宝支付示例详解
Aug 22 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
浅析Python迭代器的高级用法
Jul 16 Python
Python如何使用27行代码绘制星星图
Jul 20 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
python 解决Windows平台上路径有空格的问题
Nov 10 #Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 #Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 #Python
pytorch学习教程之自定义数据集
Nov 10 #Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 #Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 #Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 #Python
You might like
如何使用PHP中的字符串函数
2006/11/24 PHP
计算php页面运行时间的函数介绍
2013/07/01 PHP
php中autoload的用法总结
2013/11/08 PHP
PHP实现简易blog的制作
2016/10/24 PHP
js网页版计算器的简单实现
2013/07/02 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
对于Python中线程问题的简单讲解
2015/04/03 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
python爬取m3u8连接的视频
2018/02/28 Python
python如何从文件读取数据及解析
2019/09/19 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
C#笔试题集合
2013/06/21 面试题
中学生学雷锋活动心得体会
2014/03/10 职场文书
艺术教育实施方案
2014/05/03 职场文书
关于旅游的活动方案
2014/08/15 职场文书
公司合作协议范文
2014/10/01 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫