pythonのprint関数で改行しないで上書きを行う方法

Python プログラミング Python

ここではPython3のprint関数を使って、改行をしないで出力した情報を上書きしていく方法について解説します。

改行しない方法

改行しない方法はprint関数の引数であるendキーワードに空文字('')を指定します。
通常意識していませんが、endキーワードを指定しない場合はデフォルトで改行(\n)が指定されているためです。

\n はLF(Line Feed)といい、改行コードになります。

上記は次の動きをします。

1行目:
print関数にオブジェクトとして文字列である'Hellow 'を指定して、endキーワードとして空文字を指定しています。これによりオブジェクトをバッファに格納したまま、次のデータを待ちます

2行目:
print関数にオブジェクトとして文字列である'world'のみを指定しています。endキーワードを指定していない為、オブジェクトの末尾に改行(\n)がデフォルトで加えられます。改行が出力データとして存在する場合、バッファに溜まっているデータを出力します。

バッファには1行目の'Hellow 'と2行目の'world'が格納されていたので合わせて'Hellow world'と出力されます。

 

改行しないで出力結果を上書きしていく方法

print関数にオブジェクトとしてCR(Carriage Return)、endキーワードとして空文字を指定することで実現できます。

以下は、0.5秒間隔で、「1から10の数を同じ位置に上書き」しながらカウントアップします。


3行目:
'\r' CR(Carriage Return)といい、印刷位置を左端に戻す動作になります。

CRも改行のLF(LineFeed)と同じで、バッファに貯めたデータを出力して、印刷位置を左端に戻します

なので、1回目はバッファは空なのでデータは出力されずに印刷位置を左に戻し、オブジェクトである文字列の '1' をバッファに格納します。

次に '\r' がバッファに格納されるため、それまでに格納されていたデータ('1')を出力して、印刷位置を左端に戻します。そして次のオブジェクトである文字列('2')をバッファに格納・・っと、この繰り返しを行うことで上書きされながら出力されます。

 

まとめ

print関数の引数をうまく使うことで色々な制御をしながら出力処理ができそうですね。
今回のポイントは、デフォルトで指定されている改行をendキーワードで制御し、
CRをオブジェクトとして指定することで印刷位置を左端に戻して上書きを行うでした。

endキーワード以外にも使える引数がprint関数には用意されています。
print関数の引数については以下の記事を参照してください。

『Python入門』print関数の引数でセパレータ 改行 出力先をコントロール
ここではPython 3.7.5 ドキュメントを基に、print関数が持つ引数について解説し、実際にコードを書きながら理解していきましょう。

 

タイトルとURLをコピーしました