torinaブログ

DjangoとBootstrap4で作成したブログ
Python, Django, Kivy, Bootstrap, Apache等のメモです
ソースコード

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

Python Python標準ライブラリ
約262日前 2016年6月10日14:57
https://torina.top/main/119/
https://torina.top/main/184/
以前に、「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")




ちょっと書き換えて、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()