1. ホーム
  2. python

[解決済み] Pythonでstdoutに前の印刷を上書きするには?

2022-04-28 14:28:07

質問

以下のようなコードがあった場合。

for x in range(10):
     print x

という出力を得ることになる。

1
2
etc..

改行を表示する代わりに、前の値を置き換えて同じ行に新しい値で上書きしたいのです。

どのように解決するのですか?

簡易版

一つの方法として、キャリッジリターン( '\r' ) 文字を使用すると、次の行に進まずに行頭に戻ることができます。

パイソン3

for x in range(10):
    print(x, end='\r')
print()

Python 2.7前方互換

from __future__ import print_function
for x in range(10):
    print(x, end='\r')
print()

Python 2.7

for x in range(10):
    print '{}\r'.format(x),
print

Python 2.0-2.6

for x in range(10):
    print '{0}\r'.format(x),
print

後者2つ(Python2のみ)の場合、print文の最後のカンマは、次の行に行かないようにするためのものです。最後のprint文は次の行に進むので、プロンプトが最終出力を上書きすることはありません。

行内清掃

新しい行のテキストが既存の行より短くないことを保証できない場合は、「行末までクリア」というエスケープシーケンスを追加すればよいのです。 '\x1b[1K' ( '\x1b' = ESC)。

for x in range(75):
    print('*' * (75 - x), x, end='\x1b[1K\r')
print()