Skip to content

[Python] 使用 tqdm 套件展示進度條、並嘗試自己寫進度條

在我們撰寫 Python 程式碼的時候,有時候,我們會希望我們正在做的工作能夠視覺化顯示『進度條』,好方便我們掌握我們的程式直到到哪裡了。如果是這種需求的話,除了自己寫進度條外,也可以使用 Python 當中比較知名的進度條模組——『tqdm』。

tqdm 的官方網站於此: https://pypi.org/project/tqdm/

tqdm ,也是阿拉伯語當中的『進度條』的意思。只需要安裝這個模組,我們就可以在任何需要迭代的地方使用 tqdm 來顯示進度。

那麼,以下開始介紹怎麼使用 tqdm。


tqdm 使用方法

由於這個模組並不是 Python 自帶的,所以如果我們第一次使用,我們要使用以下指令下載:

pip3 install tqdm


安裝好後我們來看段 Sample Code:

# -*- coding: utf-8 -*-
from time import sleep
from tqdm import tqdm, trange

for i in tqdm(range(1000)):
    sleep(0.01)



Output:

100%|██████████| 1000/1000 [00:10<00:00, 95.76it/s]


sleep() 函式是讓程式每次執行到這裡時停止 0.01 秒,總共 1000 次。我們可以看到,底下的輸出有了進度條。你可以實際測試看看,應該會看到進度條增長。


另外,我們也可以使用 trange() 來實現同樣的功能。

for i in trange(1000):
    sleep(0.01)


Output:

100%|██████████| 1000/1000 [00:10<00:00, 95.72it/s]


這樣也是可以的。


另外,不僅僅是使用在 for 迴圈裡頭,我們可以自己定義在什麼時候推進進度。以下是一段簡單的範例:

times = 0
progress = tqdm(total=1000)

while times < 1000:
    progress.update(1)
    times += 1
    sleep(0.01)



Output:

100%|██████████| 1000/1000 [00:10<00:00, 95.68it/s]


看起來是一樣的功能,但我們這次可以自己選擇在什麼時候將 progress.update() ,也可以自己選擇 update() 的數量。

順帶一提,如果是在 Google Colab 或是 Kaggle Notebook、Jupyter Notebook 等平台上,tqdm 的寫法是得用他們提供的 notebook 包:

from tqdm.notebook import tqdm

當然你也可以自己客製化自己的進度條

當然,除了使用 tqdm 模組來實現自己的進度條外,你可以自己寫自己的進度條。

以下我來拋磚引玉一下,讓各位見笑了:

from time import sleep

temp = 0
total = 1000

for n in range(1000):
    temp += 1
    print('\r' + '[Progress]:[%s%s]%.2f%%;' % (
    '█' * int(temp*20/total), ' ' * (20-int(temp*20/total)),
    float(temp/total*100)), end='')
    sleep(0.01)



Output:

[Progress]:[███████████████████]100.00%


大家若有興趣,也不妨寫寫看自己的進度條如何?我所寫的進度條比較死,沒辦法如同 tqdm 一般任意選擇更新的時間點——但這也是我們可以任意修改的地方。

挑戰看看寫成 Class,然後可以讓使用者使用 update() 函式來更新進度吧?

我有空的時候,也想進行這樣的挑戰呢。

Leave a Reply