回车和换行区分并解决冲突

1,545 阅读2分钟

\r 代表回车,也就是打印头归位,回到某一行的开头。

\n 代表换行,就是从下一行开始打印。

Linux只用\n换行。

win下用\r\n表示换行。

例子: python中同样一句话:print (u'前面的内容\r只显示后面的内容')

在pycharm控制台显示如下:

pycharm
而python自带的IDLE运行结果什么都输出:
idle

结论:

PyCharm控制台中显示,\r真正实现了其回车的功能(回到某行开头,把前面的输出覆盖了,其实在PyCharm中是把前面的内容抹去了,不管前面的内容有多长都会被全部抹去)

而Python自带的IDLE运行结果,更接近于写文件,所以都写出来了。

以上是在一个实际的小项目中遇到的问题。在此简化记录下来。

文件读写换行解决方法:

Python 2

  • 1)如果不是txt文件,建议用wb和rb来读写。通过二进制读写,不会有换行问题。

  • 2)如果需要明文内容,请用rU来读取(强烈推荐),即U通用换行模式(Universal new line mode)。该模式会把所有的换行符(\r \n \r\n)替换为\n。只支持读入,但是也足够了。这是Python 提供给我们的最好的选择,没有之一。对比r和rU的结果:

content = file(fn, 'r').read()
# test\r\ntest2
# 这里的换行会因不同系统而不同                       
content = file(fn, 'rU').read()
# test\ntest2
# 所有的换行都被统一,不分系统

Python 3

请注意:Python 3不推荐用rU模式!

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True) 在Python 3,可以通过open函数的newline参数来控制Universal new line mode:读取时候,不指定newline,则默认开启Universal new line mode,所有\n, \r, or \r\n被默认转换为\n ;写入时,不指定newline,则换行符为各系统默认的换行符(\n, \r, or \r\n, ),指定为newline='\n',则都替换为\n(相当于Universal new linemode);不论读或者写时,newline=''都表示不转换。