python tqdm實現(xiàn)進(jìn)度條的示例代碼
一、前言
\quad \quad 有時候在使用Python處理比較耗時操作的時候,為了便于觀察處理進(jìn)度,這時候就需要通過進(jìn)度條將處理情況進(jìn)行可視化展示,以便我們能夠及時了解情況。這對于第三方庫非常豐富的Python來說,想要實現(xiàn)這一功能并不是什么難事。
\quad \quad tqdm就能非常完美的支持和解決這些問題,可以實時輸出處理進(jìn)度而且占用的CPU資源非常少
,支持循環(huán)處理
、多進(jìn)程
、遞歸處理
、還可以結(jié)合linux的命令
來查看處理情況,等進(jìn)度展示。
我們先來看一下進(jìn)度條的效果。
from tqdm import tqdm for i in tqdm(range(int(9e6))): pass
可以看到,當(dāng)我們的代碼的運行需要較長時間時,進(jìn)度條可以很好的幫助我們了解整個代碼的運行進(jìn)度。
1、安裝
tqdm的安裝十分簡單,只需要通過pip或conda就可以安裝。
2、pip安裝
pip install tqdm
3、conda安裝
conda install -c conda-forge tqdm
二、tqdm相關(guān)操作
1、迭代對象處理
對于可以迭代的對象
都可以使用下面這種方式,來實現(xiàn)可視化進(jìn)度,非常方便。
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、觀察處理的數(shù)據(jù)
通過tqdm
提供的set_description
方法可以實時查看每次處理的數(shù)據(jù)。
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
中對大量數(shù)據(jù)進(jìn)行相關(guān)操作或者遍歷表格的行列時,我們可以使用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、多進(jìn)程進(jìn)度條
在使用多進(jìn)程或者嵌套循環(huán)處理任務(wù)的時候,我們通過tqdm可以實時查看每一個進(jìn)程任務(wù)的處理情況
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、自定義進(jìn)度條顯示信息
通過update方法可以控制每次進(jìn)度條更新的進(jìn)度。
from tqdm import tqdm import time #total參數(shù)設(shè)置進(jìn)度條的總長度為100 with tqdm(total=100) as pbar: for i in range(100): time.sleep(0.05) #每次更新進(jìn)度條的長度為1 pbar.update(1)
除了上述方法之外,我們還能通過另外一種方法來實現(xiàn)操作。
from tqdm import tqdm import time #total參數(shù)設(shè)置進(jìn)度條的總長度為100 pbar = tqdm(total=100) for i in range(100): time.sleep(0.05) #每次更新進(jìn)度條的長度為1 pbar.update(1) #關(guān)閉占用的資源 pbar.close()
另外,我們還能通過set_description
和set_postfix
方法設(shè)置進(jìn)度條顯示信息。
from tqdm import trange from random import random,randint import time with trange(100) as t: for i in t: #設(shè)置進(jìn)度條左邊顯示的信息 #注意:代碼中的HVAE是可以手動換成其他內(nèi)容的 t.set_description("GEN %i"%i) #設(shè)置進(jìn)度條右邊顯示的信息 #注意:此處代碼中的gen lr lst是可以手動換成其他內(nèi)容的 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]]
令人震驚的是,當(dāng)我們將進(jìn)度條顯示的信息設(shè)置
為中文
時,竟然不會出現(xiàn)亂碼?。。?!
from tqdm import trange from random import random,randint import time with trange(100) as t: for i in t: #設(shè)置進(jìn)度條左邊顯示的信息 t.set_description("進(jìn)度 %i"%i) #設(shè)置進(jìn)度條右邊顯示的信息 t.set_postfix(loss=random(),隨機=randint(1,999),名字="h",列表=[1,2]) time.sleep(0.1)
進(jìn)度 99: 100%|████████████████████████████████████| 100/100 [00:10<00:00, 9.75it/s, loss=0.975, 列表=[1, 2], 名字=h, 隨機=469]
三、其他相關(guān)操作
Last but not least??!最后的內(nèi)容是十分重要的!!
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、當(dāng)我們在jupyter notebook
中使用進(jìn)度條時,我們會發(fā)現(xiàn)整個進(jìn)度條十分的難看,而在可能會出現(xiàn)多條進(jìn)度條的情況,這樣會讓我們的代碼顯得十分的難看,這顯然不是我們想要得到的結(jié)果。
我們先來感受一下,這種丑丑的運行結(jié)果。
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 可以看到,上面的代碼我們僅僅打印了兩百次,整個運行結(jié)果就有多個進(jìn)度條,整體的視覺效果特別差。如果當(dāng)我們需要進(jìn)行成千上萬次迭代時,整個運行結(jié)果將會不堪入目,比我們未使用進(jìn)度條時的結(jié)果更加難看,顯然這不是我們想看到的。
tqdm
針對jupyter notebook
添加了專門的進(jìn)度條美化方法,使用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=' ')
可以看到,整個運行結(jié)果立刻變得美觀而又清晰了!
\quad tqdm
在阿拉伯語中的意思是“進(jìn)展”,是python
中一個快速、擴(kuò)展性強的進(jìn)度條工具庫,能讓我們了解代碼的運行進(jìn)度,也能讓我們的運行結(jié)果看起來顯得更加美觀而又高大上??! 喜歡的小伙伴趕緊用起來吧??!
到此這篇關(guān)于python tqdm實現(xiàn)進(jìn)度條的示例代碼的文章就介紹到這了,更多相關(guān)python tqdm進(jìn)度條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)計算文件夾下.h和.cpp文件的總行數(shù)
這篇文章主要介紹了Python實現(xiàn)計算文件夾下.h和.cpp文件的總行數(shù),本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-04-04Django中使用 Closure Table 儲存無限分級數(shù)據(jù)
對于數(shù)據(jù)量大的情況(比如用戶之間有邀請鏈,有點三級分銷的意思),就要用到 closure table 的結(jié)構(gòu)來進(jìn)行存儲。這篇文章主要介紹了Django中使用 Closure Table 儲存無限分級數(shù)據(jù),需要的朋友可以參考下2019-06-06Python實現(xiàn)B站UP主自動監(jiān)控功能詳解
眾所周知,B站有很多有趣的UP主,可以教大家一些"實用"的知識,但是他們一般都沒有固定的更新時間。因此,本文將用Python編寫一個腳本,自動監(jiān)控UP是否更新了視頻,感興趣的可以了解一下2022-03-03Python math庫 ln(x)運算的實現(xiàn)及原理
這篇文章主要介紹了Python math庫 ln(x)運算的實現(xiàn)及原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07如何使用Django(python)實現(xiàn)android的服務(wù)器端
這篇文章主要介紹了Django(python)簡單實現(xiàn)android的服務(wù)器端,這里所需要的工具是PyCharm--python編輯工具,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07Numpy 多維數(shù)據(jù)數(shù)組的實現(xiàn)
這篇文章主要介紹了Numpy 多維數(shù)據(jù)數(shù)組的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06