回车和换行分别代表的是不同的字符,回车为'\r',换行为'\n‘,它们都属于不可见字符,也称为控制字符。它们在终端显示中的作用是不同的。
比如以下效果就是使用回车符和换行符不同的特性来实现的:

回车符'\r'的作用是使光标回到当前行的首行,换行符'\n'的作用是切换至下一行的行首。
以上效果的代码如下:
#!python3import timeimport sysdef clean():global Nfor i in range(N):print('\033[A\r', end='')print('❌'*40, end='\r')time.sleep(0.03)sys.stdout.flush()def demo():global bufferfor i in buffer:print(i)time.sleep(0.1)sys.stdout.flush()if __name__ == '__main__':N = 25buffer = []for i in range(N):s = '✅'*40buffer.append(s)print()while True:demo()time.sleep(0.1)clean()
我们平常使用的多的是换行符'\n',终端显示中换行符可以起到回车的作用,即让光标回到下一行的行首。单独使用回车符'\r',会让光标回到当前行的行首,此时如果输出其它字符会覆盖当前行的其它内容。
比如如下代码是在当前行重复输出:
#!python3print('##########', end='')print('\r', end='')print('xxxxxxx', end='')print('\r', end='')print('$$$')
最终输出为:
$$$xxxx###
使用回车符'\r'可以让输入点回到行首,从而覆盖其它内容。换行符’\n'让光标切换到下一行的行首。而控制字符串'\033[A'可以让光标回到上一行,配合回车符'\r'可以覆盖上一行的内容。通过多次回退可以实现向上覆盖,即以上代码演示的效果。
控制字符串'\033[A'只对终端有效,而'\r'和'\n'在文本文件中也有使用,不同的操作系统对回车和换行的使用并不一致。Linux系统一般只使用'\n'作为换行符,而Windows系统会使用'\r\n'作为换行符。
我们在notepad中保存的文本文件,通过python的文件操作打开后可以看到回车和换行符。

Python 3.11.0rc2 (main, Sep 11 2022, 20:22:52) [MSC v.1933 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> ord('\r')13>>> ord('\n')10>>> f = r'd:\test.txt'>>> t = open(f,mode='rb')>>> t<_io.BufferedReader name='d:\\test.txt'>>>> t.read()b'aaa\r\n'
回车符'\r'的经典用法是使用它来制作进度条:

#!python3import sysimport timedef do_something():passdef bar_update(rate):print("当前进度: {:3d}%".format(rate), "▋" * (rate 2), end="\r")sys.stdout.flush()time.sleep(0.05)if __name__ == '__main__':n = 0while True:do_something()bar_update(n)n += 1if n == 100:n = 0print('\r'+' '*65, end='\r')
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。
文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




