如果我有以下代码:
for x in range(10):
print x
我会得到下面的输出
1
2
etc..
我想要做的不是打印换行符,而是替换以前的值,并用同一行上的新值覆盖它。
发布于 2011-03-24 20:56:11
简单版本
一种方法是使用回车符('\r'
)返回到行首,而不前进到下一行。
Python 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'
= ESC):
for x in range(75):
print('*' * (75 - x), x, end='\x1b[1K\r')
print()
发布于 2014-02-18 05:56:47
由于我是通过Google来到这里的,但我使用的是Python3,下面是Python3的工作原理:
for x in range(10):
print("Progress {:2.1%}".format(x / 10), end="\r")
相关答案:How can I suppress the newline after a print statement?
发布于 2014-08-03 21:27:15
@Mike DeSimone answer可能会在大部分时间内工作。但是..。
for x in ['abc', 1]:
print '{}\r'.format(x),
-> 1bc
这是因为'\r'
只返回到行的开头,而不清除输出。
编辑:更好的解决方案(比我下面的旧方案更好)
如果POSIX支持对您来说足够了,下面的命令将清除当前行,并将光标留在其开头:
print '\x1b[2K\r',
它使用ANSI转义代码来清除终端行。更多信息可以在in wikipedia和this great talk中找到。
老答案
我找到的(不太好的)解决方案是这样的:
last_x = ''
for x in ['abc', 1]:
print ' ' * len(str(last_x)) + '\r',
print '{}\r'.format(x),
last_x = x
-> 1
它的一个优点是它也可以在windows上工作。
https://stackoverflow.com/questions/5419389
复制相似问题