【问题标题】:Python: How to print on same line, clearing previous text?Python:如何在同一行打印,清除以前的文本?
【发布时间】:2017-12-29 00:19:13
【问题描述】:

在 Python 中,您可以使用 \r 在同一行上打印以移回行首。

这适用于进度条或增加百分比计数器,例如:Python print on same line

但是,当打印长度可能会减少的行时,这会将之前的行文本保留在那里,例如:

import sys
for t in ['long line', '%']:
    sys.stdout.write(t + '\r')
sys.stdout.write('\n')

将终端文本保留为:%ong line

当打印到同一行时,在较长的一行之后写一个较短的行的最佳方法是什么?

【问题讨论】:

标签: python-3.x stdout


【解决方案1】:

除了\r,还需要ansi-sequence \033[K - 擦除到行尾

此代码按预期工作。

import sys
for t in ['long line', '%']:
    sys.stdout.write('\033[K' + t + '\r')
sys.stdout.write('\n')

注意,当字符串包含制表符时,这不起作用,您可能需要替换:

sys.stdout.write('\033[K' + t + '\r') 与 ...

sys.stdout.write('\033[K' + t.expandtabs(2) + '\r')

【讨论】:

  • 我发现擦除序列会干扰空格扩展选项卡,除非您将其放在单独的字符串中,例如 print('\033[K' + '\tWords here'.expandtabs(2))
  • 感谢您指出这一点,补充说明,我不确定是否有比您建议的更好的方法来解决这个问题。
【解决方案2】:

我认为最简单的方法是在字符上写空格。为此,最好编写尽可能多的空格来仅覆盖最后一行。 示例:

previousLength = 0
for t in ["long line", "%"]:
    print(" " * previousLength, end="\r") 
    print(t, end="\r")

    previousLength = len(t)

print("\n")

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多