Python中print配合\r与end=''出现显示残留问题如何解决?
问题原因
- 输出长度不固定:当时间数值为个位数时,输出的字符串长度比两位数时短1位,上一轮输出末尾的残留字符无法被新内容完全覆盖,就会出现多余的0等异常字符。
- 多参数打印自动加空格:你使用
print('\r', hours, ":", mins, ":", secs, end ='')这种多参数逗号分隔的写法时,\r和第一个参数hours之间会被print自动插入一个空格,导致行首出现冗余空格,进一步打乱输出长度。
修复方案
使用格式化字符串固定输出长度,统一让小时、分钟、秒都占2位,不足的话补前导0,同时避免多参数打印的自动空格问题,修改后的print语句如下:
print(f"\r{int(hours):02d}:{int(mins):02d}:{int(secs):02d}", end='')
如果使用的是Python3.5及更早的不支持f-string的版本,可以改用format写法:
print("\r{:02d}:{:02d}:{:02d}".format(int(hours), int(mins), int(secs)), end='')
修改后每次输出的长度固定为8个字符,\r会把光标移动到行首,新内容会完整覆盖上一轮的所有内容,不会再出现残留字符的问题。如果你不需要前导0的显示效果,也可以在输出末尾加2-3个空格覆盖残留内容,写法如下:
print(f"\r{hours}:{mins}:{secs} ", end='')
内容的提问来源于stack exchange,提问作者Vicks
相关产品推荐
相关产品推荐

