147

我想知道是否可以删除您在 Python 中打印的项目 - 不是从 Python GUI,而是从命令提示符。例如

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

所以它打印

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

但是,我的问题是我希望这一切都在一条线上,并且当其他东西出现时它会自行删除。因此,"Loading", "Loading.", "Loading...我不想打印,而是希望它打印"Loading.",然后它会删除行上的内容并将其替换为"Loading..",然后"Loading.."将其(在同一行)删除并替换为"Loading...". 这有点难以描述。

ps 我曾尝试使用 Backspace 字符,但它似乎不起作用("\b"

4

3 回答 3

228

只需使用 CR 转到行首。

import time
for x in range (0,5):  
    b = "Loading" + "." * x
    print (b, end="\r")
    time.sleep(1)
于 2011-03-13T18:20:09.493 回答
124

一种方法是使用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
于 2011-03-13T17:22:31.027 回答
32
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)以便在请求时打印结果而无需任何缓冲。

于 2011-03-13T18:05:36.253 回答