はじめに
今回は、tqdm というプログラムの進行状態をプログレスバーに表示するライブラリの使い方をメモしておきます。
これが使われているプログラムを見て、自分のコードにも導入しようと思い調べました。
tqdm の動作確認
準備
名前について
こちらによると、tqdm は
- the Arabic word taqaddum (تقدّم) which can mean “progress,”
- an abbreviation for “I love you so much” in Spanish (te quiero demasiado)
だそうです。なんて発音したら良いのかな。。
Install
pip で何のトラブルもなくインストールできました。
使ってみた
Iterator にかぶせると、自動で表示してくれました。
test01.py
from tqdm import tqdm
from time import sleep
print('range(10)')
for i in tqdm(range(10), desc="proc1", postfix="range", ncols=80):
sleep(0.2)
pass
print("----------------------------------------------------")
print('range(10)')
dics = {0: 'a', 1:'b', 2: 'c', 3:'d'}
for k, v in tqdm(dics.items(), desc="proc2", postfix="dict", ncols=80):
sleep(0.2)
pass
実行すると、下記のように表示されました。
$ python test01.py
range(10)
proc1: 100%|█████████████████████████████| 10/10 [00:02<00:00, 4.93it/s, range]
----------------------------------------------------
range(10)
proc2: 100%|████████████████████████████████| 4/4 [00:00<00:00, 4.90it/s, dict]
----------------------------------------------------
また、より細かく進捗を制御することもできます。
- total で全体の
- update で進捗状態を更新する
- close する。
最後のclose も必要とのこと。
で、下記のように実装してみました。
test02.py
from tqdm import tqdm
from time import sleep
from random import randint
pbar = tqdm(range(10), desc="myprog", postfix="postfix", ncols=80, total = 100)
i = 0
while i<100:
sleep(0.1)
p = randint(0, 10)
i += p
if i > 100:
p = p - (i-100)
pbar.update(p)
pbar.close()
結果、下記のように表示されました。
$ python test02.py
myprog: 100%|████████████████████████| 100/100 [00:02<00:00, 43.07it/s, postfix]
今回、カウンターが100を超えないようにしていますが、ここでupdate で最初に設定した total を超えてインクリメントしてしまうと、バーが消えました。別に問題はないのですが、最後100/100 でバーを表示したままにしたかったので、調整を入れました。
まとめ
あっさりとtqdm を使えた。今度、使ってみよう。
(2022/07/30)