今日在测试文件操作的readline时遇到了几个问题,下面进行一下梳理:
- \r回车:光标移动到当前行的开始位置
print('这是第一行\r上一行被我覆盖掉了',end='') # 上一行被我覆盖掉了
- \n换行:光标移动到下一行
- \r\n回车换行:光标移动到下一行的行首位置
- 发现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.结束
- 当指定写文件的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
故:
- 这是什么情况遇到\r来改行行首,看下一行,这里的语句前的行号才代表控制台的行号
- what is happened遇到\r来行首还是\r还是在行首不动
- 今天你学习了吗遇到\r来行首
- 为啥在末尾就会被转换成新的一行呢遇到\r来行首还是\r还是在行首不动
以上可以看出,我们一直在第一行,最终所有内容都被覆盖掉了,啥也没有