pythonで複数行の標準出力を上書きしながら出力する方法

こんにちは。hacknoteのr.katoです。

今回はpythonで標準出力時に上書き(更新)をしながら標準出力をする方法を紹介していきます。

1行だけの場合

以下の様にprintする文字列の最初もしくは最後に`”\r”を結合し、引数endに空白を指定してあげれば指定した文字列が上書きされます。
以下の場合は0から9までが同じ場所で出力されます。

import time
for i in range(10):
    print("\r"+str(i),end="")
    time.sleep(1)

複数行の場合

複数行の場合、以下の様にprint文で表示する文字列の一番最後に\033[nAを結合して表示すれば、OKです。

import time
for i in range(10):
    print(str(i)+"\n"+str(i)+"\n"+str(i)+"\n"+"\033[3A",end="")
    time.sleep(1)

\033[nAはカーソルの移動を意味しており、上記のプログラムの場合、3行標準出力し、
その後、カーソルが3行上に移動すると言う意味です。
他にも上下左右、以下の様にカーソルを移動させる方法があります。

ちなみに、1行のみ上書きしていた時に使っていた、\rはその行の一番最初までカーソルを移動させると言う意味を持っています。

\033[nA #n行上に
\033[nB #n行下に
\033[nC #n行右に
\033[nD #n行左に