一、前言
\quad \quad 有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事。
\quad \quad tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持循环处理、多进程、递归处理、还可以结合linux的命令来查看处理情况,等进度展示。
我们先来看一下进度条的效果。
from tqdm import tqdm for i in tqdm(range(int(9e6))): pass
可以看到,当我们的代码的运行需要较长时间时,进度条可以很好的帮助我们了解整个代码的运行进度。
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)
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)
除了上述方法之外,我们还能通过另外一种方法来实现操作。
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()
另外,我们还能通过set_description和set_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=' ')
可以看到,整个运行结果立刻变得美观而又清晰了!
\quad tqdm在阿拉伯语中的意思是“进展”,是python中一个快速、扩展性强的进度条工具库,能让我们了解代码的运行进度,也能让我们的运行结果看起来显得更加美观而又高大上!! 喜欢的小伙伴赶紧用起来吧!!
到此这篇关于python tqdm实现进度条的示例代码的文章就介绍到这了,更多相关python tqdm进度条内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍Java Swing JProgressBar进度条的实现示例,包括了Java Swing JProgressBar进度条的实现示例的使用技巧和注意事项,需要的朋友参考一下 1. 概述 官方JavaDocsApi: javax.swing.JProgressBar JProgressBar,进度条。 以可视化形式显示某些任务进度的组件。 进度条中心可显示进度百分比的文本表示形式。 当
本文向大家介绍Python实现进度条和时间预估的示例代码,包括了Python实现进度条和时间预估的示例代码的使用技巧和注意事项,需要的朋友参考一下 一、前言 在python当中可以用进度条来显示工作的进度,比如for循环的进度或者一些模型训练的进度。 在这里可以使用progressbar包以及tqdm包来实现。 使用pip install progressbar 安装progressbar包。 使
本文向大家介绍基于Blod的ajax进度条下载实现示例代码,包括了基于Blod的ajax进度条下载实现示例代码的使用技巧和注意事项,需要的朋友参考一下 普通的浏览器下载 在web开发中,如果要实现下载功能,往往都是使用新开web页面或者是使用iframe的形式。实现起来其实很简单: 用户点击a标签弹出一个新页签后,或者是打开了iframe后,浏览器就会接受一个下载响应,并下载附件。其实所谓附件下载
本文向大家介绍servlet+jquery实现文件上传进度条示例代码,包括了servlet+jquery实现文件上传进度条示例代码的使用技巧和注意事项,需要的朋友参考一下 现在文件的上传,特别是大文件上传,都需要进度条,让客户知道上传进度。 本文简单记录下如何弄进度条,以及一些上传信息,比如文件的大小,上传速度,预计剩余时间等一些相关信息。代码是匆忙下简单写的,一些验证没做,或代码存在一些隐患,不
本文向大家介绍jQuery实现可拖动进度条实例代码,包括了jQuery实现可拖动进度条实例代码的使用技巧和注意事项,需要的朋友参考一下 html css js 效果图 实现原理 首先是用mousedown()鼠标按下事件保存一个状态值,mouseup()鼠标抬起事件取消该状态,再同时配合mousemove()鼠标移动事件,实现按住拖动的效果。 在鼠标移动的同时去改变精度条的长度和按钮的相对左
本文向大家介绍springMVC实现前台带进度条文件上传的示例代码,包括了springMVC实现前台带进度条文件上传的示例代码的使用技巧和注意事项,需要的朋友参考一下 项目框架采用spring+hibernate+springMVC如果上传文件不想使用flash那么你可以采用HTML5;截图前段模块是bootstarp框架;不废话直接来代码;spring-mvc配置文件;效果截图如下: 详细实现如