Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3,如何用print清除行以进行覆盖?_Python_Python 3.x - Fatal编程技术网

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)