Python製プログレスバーを3行で書く

for文の中に標準出力を書くと、ターミナルが文字で埋め尽くされるので回避したいが、 for文の中身が重くて無反応になるのも困る。 なのでプログレスバーを書けば良い、という結論に至るわけだが、 さくっと色んなfor文に書きたいので、3行で書く方法を説明する。

インストール

progressbarというそのままな名前のライブラリーをインストールする。 2016年10月現在は、progressbar2 3.10.1という謎のバージョン。

# pip install progressbar2

実装

手順は次の3つ。

  1. インポート
  2. 初期化
  3. 更新

for文の外でインポートと初期化を行い、for文の中で更新を行う。 初期化の時に、繰り返し回数をパラメーターに指定する。 またfor文の中では、個々のデータではなく、全てのデータをindex(i)で指定して扱えるようにする。 なおサンプルとして、RSSを入れるとページのソースを取得してくれるメソッドget_src()を利用する。 実装は次の通り。

from progressbar import ProgressBar  # 1. インポート

def main(rss):
    pb = ProgressBar(maxval=len(rss)).start()  # 2. 初期化
    for i in range(len(rss)):
        get_src(rss[i])
        pb.update(i+1)  # 3. 更新

結果

ターミナルの幅をフルで使った出力になる。 カスタマイズしたい場合は、参考文献を参照。

f:id:Shoto:20161009165725g:plain

参考文献