快轉到主要內容
  1. 教學文章/

Python: 我需要進度條! tqdm

·3 分鐘· loading · loading · ·
Python Tqdm Data Science
每日拍拍
作者
每日拍拍
科學家 X 科技宅宅
目錄
Python 學習 - 本文屬於一個選集。
§ 12: 本文

為什麼需要進度條?
#

不管是最近最紅的 AI、機器學習、資料科學,甚至是各種科學計算時,常常要處理超大規模的資料。你是不是也常遇到這種場景:一個 for 迴圈正在處理 10 萬筆資料,結果畫面一片寂靜,完全不知道程式到底跑到哪裡,只能默默等到天荒地老…… 不然就是看著螢幕滿滿的 print 畫面。

如果有一條漂亮的進度條可以即時顯示處理進度,會不會感覺程式專案瞬間專業、心情也更安心?這時候,你一定要認識超好用的 Python 套件——tqdm

安裝 tqdm
#

先來安裝 tqdm(只需一次):

pip install tqdm

終端機版
#

1. 基礎用法
#

最基本的用法是直接把 tqdm() 包在你的 iterable(如 listrange)外層,這樣每次迴圈都會自動顯示進度條:

from tqdm import tqdm
import time

for i in tqdm(range(100)):
    # 假裝做一件很慢的事情
    time.sleep(0.05)

py

只要一行包裝,馬上有專業的進度條!(而且還會自動計算剩餘時間、處理速度等資訊)

2. 手動更新進度
#

有時候你要處理的是自訂的資料流(比如逐步下載或處理大型檔案),可以用 tqdm 物件手動更新:

from tqdm import tqdm
import time

pbar = tqdm(total=50)
for i in range(50):
    # 做一點事情
    time.sleep(0.1)
    pbar.update(1)  # 每次手動加一
pbar.close()

Jupyter Notebook
#

在 Jupyter Notebook / Colab 裡,也能讓進度條完美顯示(還是互動式的!):

from tqdm.notebook import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.05)

如果你是用 Jupyter,務必用 from tqdm.notebook import tqdm,這樣進度條才會出現在 cell 下方,不會亂碼。

notebook

只要在 tqdm()裡面加上desc=... 就可以為進度條加上說明:

from tqdm.notebook import tqdm
import time

for i in tqdm(range(100), desc="資料處理"):
    time.sleep(0.05)

notebook_desc

是不是很讚呢!?

常見迴圈範例
#

1. 處理資料集
#

from tqdm import tqdm

dataset = range(10000)
for data in tqdm(dataset, desc="處理資料"):
    # 處理每一筆資料
    pass

2. 批次訓練(搭配 enumerate)
#

from tqdm import tqdm

for epoch in range(5):
    for batch_idx, batch in enumerate(tqdm(data_loader, desc=f"Epoch {epoch+1}")):
        # 訓練每一個 batch
        pass

3. 多層進度條 (nested loop)
#

from tqdm import trange

for i in trange(3, desc="外層"):
    for j in trange(5, desc="內層", leave=False):
        # 處理...
        pass

4. 列表生成式也能用!
#

from tqdm import tqdm

result = [x**2 for x in tqdm(range(1000))]

5. 平行處理:用 process_map 加速你的迴圈!
#

如果你常常遇到「一堆資料處理太久」、「一顆 CPU 不夠力」的狀況,tqdm 內建的平行處理其實非常簡單!只要用 process_map 這個函數,立刻可以把你的函數平行運算,而且還自帶進度條。

from tqdm.contrib.concurrent import process_map
import time

def slow_function(x):
    time.sleep(0.1)  # 假裝很花時間
    return x * x

inputs = list(range(20))
results = process_map(slow_function, inputs, max_workers=4)
print(results)

注意事項

  • process_map 的用法類似 map,但會自動平行運算(多核心),還會顯示進度條!
  • max_workers 可以設定你想用幾個 CPU 核心(預設會自動偵測)。
  • 回傳結果和原來順序一樣,不用怕資料亂掉。
  • 適合「CPU bound」的任務,例如大量計算或資料處理(如果是大量 I/O,例如下載檔案,建議用 thread_map)。
  • 如果你要在 Jupyter Notebook 裡用,有時候會遇到無法顯示進度條或異常,可考慮用 %run 方式執行 py 檔。
  • thread_map:適合大量 I/O 工作(如爬蟲、下載檔案)。

小技巧
#

  • desc="..." 參數可以幫進度條加上自訂描述。
  • leave=False 跑完後不保留進度條(畫面更乾淨)。
  • 搭配 pandasnumpy 等等也很方便。

結語
#

tqdm 幾乎可以無痛套進任何 Python 迴圈,讓你再也不用猜程式什麼時候跑完,尤其處理大量資料時非常有感。拍拍君自己做資料清理、訓練模型、甚至爬蟲任務都會用 tqdm

下次再也不用枯等不安啦,直接讓進度條陪你一路衝到底吧!

Python 學習 - 本文屬於一個選集。
§ 12: 本文

相關文章

管理秘密環境變數 python-dotenv
·1 分鐘· loading · loading
Python Dotenv
開發的好習慣 Unit Test
·5 分鐘· loading · loading
Python Pytest Ci Unittest
設置和管理 SSH 金鑰
·2 分鐘· loading · loading
SSH
超好用的本地LLM: Ollama
·6 分鐘· loading · loading
好玩軟體 LLM Ollama
在 iPhone 上也可以使用本地 LLM!
·2 分鐘· loading · loading
好玩軟體 LLM Ollama
iPadOS 26 搶先體驗!
·3 分鐘· loading · loading
搶先體驗 Ipad Os