LoginSignup
2
4

More than 1 year has passed since last update.

【Python】進捗状況をprogress bar で表示(tqdm)

Last updated at Posted at 2022-07-30

はじめに

今回は、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)

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4