删除并替换打印的项目

时间:2011-03-13 17:15:55

标签: python python-3.x printing python-3.2

我想知道是否可以删除用Python打印的项目 - 不是从Python GUI,而是从命令提示符。 e.g。

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..."。这很难描述。

p.s我试过使用Backspace字符,但它似乎不起作用("\b"

由于

3 个答案:

答案 0 :(得分:114)

只需使用CR即可开始行。

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

答案 1 :(得分:90)

一种方法是使用ANSI escape sequences

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

答案 2 :(得分:18)

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),具体取决于您正在进行打印的控制台,以便在请求时打印结果而不进行任何缓冲。