覆盖同一行上以前的打印输出
在编程中,经常会遇到需要更新显示在上的现有值的情况标准输出(stdout)而不添加换行符。考虑以下 Python 代码:
for x in range(10): print(x)
此代码在不同的行上输出数字 1 到 10。要覆盖以前的值并将其替换为同一行上的新值,您可以使用以下技术:
简单版本:
利用回车符 ( '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
在这些示例中,打印语句后面的尾随逗号会抑制换行符。最终的打印语句前进到下一行,确保您的提示不会覆盖您的输出。
行清理:
如果您不能保证新行文本不短于现有行,您可以使用“清除到行尾”转义序列 'x1b[1K' ('x1b' = ESC):
for x in range(75): print('*' * (75 - x), x, end='\x1b[1K\r') print()
长换行:
上述方法假设您的书写没有超出行长。回车仅返回到当前行的开头。因此,如果您的输出超过行长度,则只会删除最后一行。
要缓解此问题并防止光标换行到下一行,您可以禁用换行:
print('\x1b[7l', end='') # Disable line wrapping print('\x1b[7h', end='') # Re-enable line wrapping
请注意,您必须在代码块末尾手动重新启用换行,以避免使终端处于损坏状态。
以上是如何在 Python 中的同一行上覆盖以前的打印输出?的详细内容。更多信息请关注PHP中文网其他相关文章!