Python 3,如何用print清除行以进行覆盖?
我试图用新行覆盖我的上一次打印,但我无法清除最后一行 我原以为冲水可以消除障碍,但我看不出有任何效果Python 3,如何用print清除行以进行覆盖?,python,python-3.x,Python,Python 3.x,我试图用新行覆盖我的上一次打印,但我无法清除最后一行 我原以为冲水可以消除障碍,但我看不出有任何效果 import time s = "qwertyuiopåasdfghjklæøzxccvbnm" for num in range(len(s)): print("\r{}".format(str[:len(s)-num]), end="", flush=True) time.sleep(.1) 在我的示例中,我以以下输出结束: qwertyuiopåasdfghjklæø
import time
s = "qwertyuiopåasdfghjklæøzxccvbnm"
for num in range(len(s)):
print("\r{}".format(str[:len(s)-num]), end="", flush=True)
time.sleep(.1)
在我的示例中,我以以下输出结束:
qwertyuiopåasdfghjklæøzxccvbnm
但希望输出仅为“q”。
如果下一次打印比第一行小,我仍然可以看到最后一行的结尾
我可以用空格覆盖第一行,但我不喜欢这样,因为如果我调整控制台的大小,它会改变一切
是否真的要清除最后一行,并且只清除最后一行
一个在linux和windows下都能工作的解决方案会很好
谢谢。您可以使用
格式
在字符串中填充空格,这将覆盖旧文本
import time
s = "qwertyuiopåasdfghjklæøzxccvbnm"
spacer = '\r{{:{}}}'.format(len(s)) # '\r{:30}' for this s
for num in range(len(s), 0, -1):
print(spacer.format(s[:num]), end='')
time.sleep(.1)
print()
您可以阅读有关格式规范迷你语言的更多信息更可重用的解决方案可以是:
from os import get_terminal_size
def rprint(*args, **kwargs):
try:
cols, rows = get_terminal_size()
except OSError:
# If get_terminal_size is not supported, override with whitespaces is not needed.
cols, rows = (1, 1)
# Override the line with whitespace and return cursor(-1 because of cursor size)
print("\r{:>{}}".format("", cols-1), end="\r")
print(*args, **{**kwargs, **{"end": "", "flush": True}})
if __name__ == '__main__':
import time
s = "qwertyuiopåasdfghjklæøzxccvbnmq"
# I want to end the loop with "q", not an empty string.
for num in range(len(s)):
rprint(s[:len(s) - num])
time.sleep(.1)
rprint("Override last line again")
仅在python 3.5中测试+
但如果最后打印的行大于端子宽度,则不会失败
我不知道是否有办法把最后一行打印到标准输出?如果有,则可以计算该行的长度,而不是获取终端大小 在这里检查答案,为什么不直接打印(len(s)-num)?@我想你可以打印(s[:num]+''*(len(s)-num))。我不认为这更好。如果
'{:{}}}格式(len(s))
令人困惑,我想您可以执行'{:'+str(len(s))+'}
您的代码不会像我希望的那样在循环末尾以“q”结尾,因为您的end=“\r”。但我明白你的意思。我仍然会使用我的代码并执行ns=s[:len(s)-num]
和print(“\r{:{}}”)。格式(ns,len(ns)+1,end=”“,flush=True)