Pythonで、進捗バーを自作する

Twitterでシェア FaceBookでシェア はてなブックマークでシェア

Python - 標準ライブラリ
2018年11月22日21:15に更新(約21日前)
2018年11月7日21:00に作成(約36日前)

旧ブログ移行記事です。

概要

以前に、「tqdm」を使った進捗バーを紹介しました。
Pythonで進捗バーを表示する(tqdm)
Python、requestsとtqdmでダウンロードの進捗を表示する

今回は進捗バーを自作してみましょう。

コード

まず最初のコードです。

import time
import sys

for i in range(1, 101):
    time.sleep(0.01)
    sys.stdout.write("\r")
    sys.stdout.write("{0}%".format(i))
    sys.stdout.flush()
sys.stdout.write("\n")

50%のように、パーセント表示だけされるシンプルな例です。

ちょっと書き換えて、print()でやってみましょう。

for i in range(1, 101):
    time.sleep(0.01)
    print("\r{0}%".format(i), end="")
print()

ポイントは以下です。まずend=""改行をなくします\rは、キャリッジリターンと呼ばれるもので、行頭に戻すという意味があります。

print("\r{0}%".format(i), end="")

サンプルとして、例えば以下のようなものは

for i in range(10):
    time.sleep(0.1)
    print("\r[{0}]".format("#" * i), end="")
print()

以下のように表示されます。

もう少しかっこよくしたいならば...

for i in range(1, 11):
    time.sleep(0.1)
    print("\r{0}% [{1}]".format(i*10, "#" * i), end="")
print()


これぐらいになると、そこそこ使える見た目ではないでしょうか。 進捗を表示する際は、表示がガタガタしないように、進捗バーの幅を固定すると良いでしょう。

bar_template = "\r[{0}] {1}/{2} 読み込み"
for i in range(1, 31):
    time.sleep(0.1)

    # []内の"#"と空白を調整する。iが1で#1つに空白29、iが30で#30個に空白0
    bar = "#" * i + " " * (30-i)
    print(bar_template.format(bar, i, 30), end="")
print()


Twitterでシェア FaceBookでシェア はてなブックマークでシェア

記事にコメントする