移除并替换已打印项目
我在想,能不能在Python中删除已经打印出来的内容——不是在Python的图形界面里,而是在命令提示符下。
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..."
。这有点难以描述。
补充一下,我试过使用退格符,但似乎没有效果 ("\b"
)
3 个回答
42
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.write('\r'+b)
之后立即运行 sys.stdout.flush()
,这样才能确保结果在你请求的时候就被打印出来,而不是被暂时存起来。
145
一种方法是使用 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
279
只需使用回车键(CR)就可以回到行的开头。
import time
for x in range (0,5):
b = "Loading" + "." * x
print (b, end="\r")
time.sleep(1)