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 相关文章推荐
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
Python后台开发Django会话控制的实现
Apr 15 Python
Django 数据库同步操作技巧详解
Jul 19 Python
django 消息框架 message使用详解
Jul 22 Python
在python中求分布函数相关的包实例
Apr 15 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
Python破解极验滑动验证码详细步骤
May 21 Python
Django模型层实现多表关系创建和多表操作
Jul 21 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
thinkphp实现like模糊查询实例
2014/10/29 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
网页右下角弹出窗体实现代码
2014/06/05 Javascript
jquery显示loading图片直到网页加载完成的方法
2015/06/25 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
Python日期的加减等操作的示例
2017/08/15 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python中常用的内置方法
2019/01/28 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
xml有哪些解析技术?区别是什么
2016/04/26 面试题
党员领导干部承诺书
2014/05/28 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
物流管理专业推荐信
2014/09/06 职场文书
优秀班主任申报材料
2014/12/16 职场文书
给客户的检讨书
2014/12/21 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
2015年林业工作总结
2015/05/14 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
源码安装apache脚本部署过程详解
2022/09/23 Servers