当\r遇上print——\r \n \rn的区别和应用

今日在测试文件操作的readline时遇到了几个问题,下面进行一下梳理:

  • \r回车:光标移动到当前行的开始位置
print('这是第一行\r上一行被我覆盖掉了',end='')  # 上一行被我覆盖掉了
  • \n换行:光标移动到下一行
  • \r\n回车换行:光标移动到下一行的行首位置
  1. 发现readline调用一次后有些地方会在控制台上多打印一行
   if __name__ == '__main__':
    f = open('test新.txt','w',1,None,None,'')
    f.write('这是什么情况\nwhat is happened\r今天你学习了吗\r\n')
    f.close()
    f1 = open('test新.txt', 'r',1,None,None,'')
    while 1:
        line = f1.readline()
        if not line:
            break
        print(line)
    f1.close()
'''
控制台输出:
这是什么情况

what is happened
今天你学习了吗


Process finished with exit code 0
'''

print()函数本身默认的结尾符为\n,所以解析为:
这是什么情况\n\n
what is happened\r\n
今天你学习了吗\r\n\n
故:
1.这是什么情况,遇到\n到下一行
2.遇到\n到下一行
3.what is happened遇到\r\n到下一行行首
4.今天你学习了吗遇到\r\n到下一行行首
5.遇到\n到下一行
6.结束

  1. 当指定写文件的newline为\r时,并且指定print的end为''时,控制台只打印了一个空行
if __name__ == '__main__':
    f = open('test新.txt','w',1,None,None,'\r')
    f.write('这是什么情况\nwhat is happened\r\n今天你学习了吗\r为啥在末尾就会被转换成新的一行呢\r\n')
    f.close()
    f1 = open('test新.txt', 'r',1,None,None,'')
    while 1:
        line = f1.readline()
        if not line:
            break
        print(line,end='')
    f1.close()
'''
控制台输出:

Process finished with exit code 0
'''

写文件指定newline='\r',所以写入后字符串被解析成:
这是什么情况\rwhat is happened\r\r今天你学习了吗\r为啥在末尾就会被转换成新的一行呢\r\r
故:

  1. 这是什么情况遇到\r来改行行首,看下一行,这里的语句前的行号才代表控制台的行号
  2. what is happened遇到\r来行首还是\r还是在行首不动
  3. 今天你学习了吗遇到\r来行首
  4. 为啥在末尾就会被转换成新的一行呢遇到\r来行首还是\r还是在行首不动
    以上可以看出,我们一直在第一行,最终所有内容都被覆盖掉了,啥也没有
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容