Pythonでプログレスバーを実装してみた

2024/09/15

Python
tqdm

あるWebサイトの大量のページをスクレイピングしている際に進捗状況を確認したく、Pythonでプログレスバーを実装してみたので使い方をまとめました。

tqdmとは

tqdm(アラビア語で"進捗"を意味する"taqaddum"から来ています)は、Pythonで使える簡単で拡張性のあるプログレスバーのライブラリです。
Pythonファイルだけでなく、Jupyter Notebookやgoogle colabでの利用も可能です。
また、tqdm.autoというモジュールを使えば、実行環境に合わせて最適なプログレスバーが自動で選択されます。

準備

下記コマンドでtqdmをインストールします。

pip install tqdm

使い方

ループ処理にtqdm関数を適用するだけでプログレスバーが表示されます。
進捗以外にも経過時間と(推定)残り時間や1ループあたりの処理にかかる時間も表示されます。

from tqdm.auto import tqdm
import time

def main():
    for i in tqdm(range(100)):
        time.sleep(1)

if __name__ == '__main__':
    main()
実行結果
 25%|██████████████████████████████████████████                                                                                                                              | 25/100 [00:25<01:15,  1.00s/it]

ネストされたループ処理でも使用できます。

from tqdm.auto import tqdm
import time

def main():
    for i in tqdm(range(10), desc="Outer Loop"):
        for j in tqdm(range(10), desc="Inner Loop"):
            time.sleep(1)

if __name__ == '__main__':
    main()
実行結果
Outer Loop:  30%|███████████████████████████████████████████████▍                                                                                                              | 3/10 [00:30<01:10, 10.05s/it]
Inner Loop:  60%|██████████████████████████████████████████████████████████████████████████████████████████████▊                                                               | 6/10 [00:06<00:04,  1.00s/it]

プログレスバーにはコード内の情報も表示できます。

from tqdm.auto import tqdm
import time

def fib(n):
    a, b = 0, 1
    if n == 1:
        return a
    elif n == 2:
        return b
    else:
        for m in range(n-2):
            a, b = b, a+b
        return b

def main():
    with tqdm(total=10, postfix={"現在のフィボナッチ数":0}) as pbar:
        for i in range(1, 11):
            result = fib(i)
            time.sleep(1)
            pbar.update(1)
            pbar.set_postfix({"現在のフィボナッチ数":result})

if __name__ == '__main__':
    main()
実行結果
 80%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                             | 8/10 [00:08<00:02,  1.01s/it, 現在のフィボナッチ数=13]

参考

【tqdm】Pythonでコードの進捗を可視化!

今回はここまでです。