1、前言python
\quad \quad 有时候在使用Python处理比较耗时操做的时候,为了便于观察处理进度,这时候就须要经过进度条将处理状况进行可视化展现,以便咱们可以及时了解状况。这对于第三方库很是丰富的Python来讲,想要实现这一功能并非什么难事。
\quad \quad tqdm就能很是完美的支持和解决这些问题,能够实时输出处理进度并且占用的CPU资源很是少
,支持循环处理
、多进程
、递归处理
、还能够结合linux的命令
来查看处理状况,等进度展现。
linux
咱们先来看一下进度条的效果。dom
from tqdm import tqdm for i in tqdm(range(int(9e6))): pass
能够看到,当咱们的代码的运行须要较长时间时,进度条能够很好的帮助咱们了解整个代码的运行进度。工具
一、安装post
tqdm的安装十分简单,只须要经过pip或conda就能够安装。spa
二、pip安装code
pip install tqdm
三、conda安装对象
conda install -c conda-forge tqdm
2、tqdm相关操做blog
一、迭代对象处理递归
对于能够迭代的对象
均可以使用下面这种方式,来实现可视化进度,很是方便。
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]
二、观察处理的数据
经过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)
三、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]
四、多进程进度条
在使用多进程或者嵌套循环处理任务的时候,咱们经过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]
五、自定义进度条显示信息
经过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]
3、其余相关操做
Last but not least!!最后的内容是十分重要的!!
一、咱们在使用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]
二、当咱们在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
中一个快速、扩展性强的进度条工具库,能让咱们了解代码的运行进度,也能让咱们的运行结果看起来显得更加美观而又高大上!! 喜欢的小伙伴赶忙用起来吧!!