如果我有以下代码:
for x in range(10): print(x)
我会得到输出
1 2 etc..
我想要做的是,不是打印换行符,而是替换先前的值并用同一行上的新值覆盖它。
一种方法是使用回车'\r'符 ( ) 返回到行首而不前进到下一行。
'\r'
for x in range(10): print(x, end='\r') print()
from __future__ import print_function for x in range(10): print(x, end='\r') print()
for x in range(10): print '{}\r'.format(x), print
for x in range(10): print '{0}\r'.format(x), print
在后两种情况下(仅限 Python 2),print 语句末尾的逗号指示不要转到下一行。最后一个 print 语句前进到下一行,因此提示不会覆盖最终输出。
如果您不能保证新行文本不短于现有行,那么您只需添加“清除到行尾”转义序列'\x1b[1K'('\x1b'= ESC):
'\x1b[1K'
'\x1b'
for x in range(75): print('*' * (75 - x), x, end='\x1b[1K\r') print()
所有这些方法都假设您输入的内容不超过行的长度。回车符只会返回到当前行的开头,因此如果您的输出超过一行,您只会删除最后一行。
如果这个问题严重到需要控制,您可以禁用换行功能,以防止光标换行到下一行。(相反,光标会停留在行尾,并且连续的字符会覆盖。)
使用 禁用换行,print('\x1b[7l', end='')使用 重新启用换行print('\x1b[7h', end='')。请注意,任何时候都不会自动重新启用换行:如果程序因异常而终止,请不要让终端处于中断状态!
print('\x1b[7l', end='')
print('\x1b[7h', end='')