Python製プログレスバーを3行で書く
for文の中に標準出力を書くと、ターミナルが文字で埋め尽くされるので回避したいが、 for文の中身が重くて無反応になるのも困る。 なのでプログレスバーを書けば良い、という結論に至るわけだが、 さくっと色んなfor文に書きたいので、3行で書く方法を説明する。
インストール
progressbarというそのままな名前のライブラリーをインストールする。 2016年10月現在は、progressbar2 3.10.1という謎のバージョン。
# pip install progressbar2
実装
手順は次の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. 更新
結果
ターミナルの幅をフルで使った出力になる。 カスタマイズしたい場合は、参考文献を参照。