web-dev-qa-db-ja.com

印刷アイテムの削除と交換

Python-Python GUIではなく、コマンドプロンプトから印刷したアイテムを削除できるかどうか疑問に思いました。例えば.

a = 0  
for x in range (0,3):  
    a = a + 1  
    b = ("Loading" + "." * a)
print (a)

だから印刷する

>>>Loading   
>>>Loading. 
>>>Loading.. 
>>>Loading...

しかし、私の問題は、これをすべて1行でやりたいことです。他の何かが発生した場合、それは自己を削除します。したがって、"Loading", "Loading.", "Loading...を印刷する代わりに、"Loading."を印刷したい場合は、行にあるものを削除し、"Loading.."に置き換えてから"Loading.."を削除して、置き換えます(オン"Loading..."と同じ行)。説明するのは難しいです。

p.s Backspace文字を使用しようとしましたが、機能していないようです("\b"

ありがとう

80
Alex

CRを使用して行の先頭に移動します。

import time
for x in range (0,5):  
    b = "Loading" + "." * x
    print (b, end="\r")
    time.sleep(1)
124
Keith

1つの方法は、 ANSIエスケープシーケンス を使用することです。

import sys
import time
for i in range(10):
    print("Loading" + "." * i)
    sys.stdout.write("\033[F") # Cursor up one line
    time.sleep(1)

また、時々便利です(たとえば、以前よりも短いものを印刷する場合):

sys.stdout.write("\033[K") # Clear to the end of line
95
Sven Marnach
import sys
import time

a = 0  
for x in range (0,3):  
    a = a + 1  
    b = ("Loading" + "." * a)
    # \r prints a carriage return first, so `b` is printed on top of the previous line.
    sys.stdout.write('\r'+b)
    time.sleep(0.5)
print (a)

バッファリングなしで要求されたときに結果を印刷するには、印刷を実行しているコンソールによっては、sys.stdout.flush()の直後にsys.stdout.write('\r'+b)を実行する必要がある場合があることに注意してください。

20
unutbu