1. 程式人生 > 程式設計 >python tqdm實現進度條的示例程式碼

python tqdm實現進度條的示例程式碼

一、前言

\quad \quad 有時候在使用Python處理比較耗時操作的時候,為了便於觀察處理進度,這時候就需要通過進度條將處理情況進行視覺化展示,以便我們能夠及時瞭解情況。這對於第三方庫非常豐富的Python來說,想要實現這一功能並不是什麼難事。
\quad \quad tqdm就能非常完美的支援和解決這些問題,可以實時輸出處理進度而且佔用的CPU資源非常少,支援迴圈處理多程序遞迴處理、還可以結合linux的命令來檢視處理情況,等進度展示。

我們先來看一下進度條的效果。

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

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-XnbUf9aE-1604921463438)(C:\Users\Admin\Desktop\test.gif)]

可以看到,當我們的程式碼的執行需要較長時間時,進度條可以很好的幫助我們瞭解整個程式碼的執行進度。

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,1,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),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<?,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_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,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,名字="h",列表=[1,2])
    time.sleep(0.1)
進度 99: 100%|████████████████████████████████████| 100/100 [00:10<00:00,9.75it/s,loss=0.975,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進度條內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!