Pythonでprint関数を使ってターミナルに出力する表示を常時更新しながら上書きしていく方法を解説します。この方法は、出力する行数が多い場合にターミナル表示が一気に流れてしまい確認しにくくなる問題を解決します。
まず、print関数の出力を上書きして1行で表示するために必要となるのは『キャリッジリターン』と『endオプション』です。
import time
for i in range(10):
print('\\rNo, %d' % i, end='')
time.sleep(0.5)
上記のコードでは、print
関数の引数先頭にキャリッジリターンをつけることとend
オプションで''
を指定することがポイントです。実際に実行してみて上書きされる様子を確認してみてください。
さらに、基本コードを少し発展させてプログレスバー表示を作ってみましょう。最初に作成するのはプログレスバーの横に進行状況表す%を表示したタイプのものです。
import time
pro_size = 10
for i in range(1, pro_size + 1):
pro_bar = ('=' * i) + (' ' * (pro_size - i))
print('\\r[{0}] {1}%'.format(pro_bar, i / pro_size * 100.), end='')
time.sleep(0.5)
このように工夫次第で様々なプログレスバーのデザインを作成することができます。自然言語処理などを行うと読み込むファイルが2,000万行あったりすることもあります。そのため実行処理が完了するまでの時間も長く進捗状況を表示させておかないと処理が行われているのか、途中で止まっているのかの確認がしにくいですよね。かといって進捗具合をそのままprint関数で出力してしまうととんでもない行がターミナルに流れることになりますので今回のような上書き1行表示の出力を書いて進捗状況を確認するのが良いでしょう。