如何覆盖以前的打印到标准输出?

新手上路,请多包涵

如果我有以下代码:

 for x in range(10):
     print x

我会得到的输出

1
2
etc..

我想做的不是打印换行符,而是想替换以前的值并在同一行上用新值覆盖它。

原文由 ccwhite1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

简易版

一种方法是使用回车符 ( '\r' ) 字符返回到行的开头而不前进到下一行。

蟒蛇3

 for x in range(10):
    print(x, end='\r')
print()

Python 2.7 向前兼容

from __future__ import print_function
for x in range(10):
    print(x, end='\r')
print()

Python 2.7

 for x in range(10):
    print '{}\r'.format(x),
print

Python 2.0-2.6

 for x in range(10):
    print '{0}\r'.format(x),
print

在后两种情况(仅限 Python 2)中,print 语句末尾的逗号告诉它不要转到下一行。最后的 print 语句前进到下一行,因此您的提示不会覆盖您的最终输出。

线路清洗

如果你不能保证新的文本行不比现有的行短,那么你只需要添加一个“清晰到行尾”的转义序列, '\x1b[1K' ( '\x1b' = 退出):

 for x in range(75):
    print('*' * (75 - x), x, end='\x1b[1K\r')
print()

原文由 Mike DeSimone 发布,翻译遵循 CC BY-SA 4.0 许可协议

由于我是通过 Google 来到这里的,但我使用的是 Python 3,下面是它在 Python 3 中的工作方式:

 for x in range(10):
    print("Progress {:2.1%}".format(x / 10), end="\r")

此处的相关答案: How can I suppress the newline after a print statement?

原文由 Pascal 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题