※python2.7系です
pythonで普通にprint文を書くと
for i in range(5): print i
0
1
2
3
4
となりコンソールに上書きされずに改行されてプリントされていく。
処理中のファイル名や内部変数の値などをリアルタイムで見ていきたい時は改行せず上書きしたほうが見やすいと思う。
そこでコンソールに上書きして表示する方法を調べてみた。
上書きして表示する方法はいくつかある。
- sys.stdout.write("~~\r")
- print ~~,"\r",
どちらかの後に
sys.stdout.flush()
を入れるだけ。
ポイントは "\r" を入れること。
キャリッジリターンといわれるものでカーソルを先頭行に移動させる意味があるらしい。
これを利用して進捗バーを表示するプログラムを作ってみた。
#coding:utf-8 import sys from time import sleep def progress_bar(): for i in xrange(1,61): bar = "[" + "#"*int(i/2) + " "*(30 - int(i/2)) + "]" sys.stdout.write("%s(%d/60)\r"%(bar,(i))) sys.stdout.flush() sleep(1) if __name__=="__main__": progress_bar()
- 実行例
[################ ](32/60)
参考サイト:
コンソール画面に上書きして出力してゆく方法
追記
python3ではxrangeが廃止されているので
xrange -> range とする。
最近ではtqdmなるライブラリが出てきたのでそちらのほうが良い
【Python】進捗状況をprogress bar で表示(tqdm) - Qiita