
本系列文章旨在提供一系列特定主题的 Python 使用指南。
在计算机还没被发明之前,人们通过「电传打字机」(Teletype Model 33)来打印文字,每秒可以打印 10 个字符。然而,该机器存在一个问题:在打完一行换行的时候,要用去 0.2 秒,正好可以打两个字符,如果在这 0.2 秒里,又有新的字符传过来,那么该字符将会丢失。
为了解决这个问题,研发人员通过在每行后面加两个表示结束的字符。一个叫做「回车」(carriage return),字符表示为 \r ,告诉打字机把打印头定位在左边界;另一个叫做「换行」(line feed),字符表示为 \n ,告诉打字机将纸向下移一行(补充:实际上回车与换行的概念来源于更早出现的机械英文打印机)。
随着计算机的发明,上述两个概念也被搬到了计算机上。然而,由于当时存储器的高昂费用,一些研究者认为在每行结尾加两个字符有些过于浪费,于是在不同的操作系统上出现了分歧:
\n\r\n\r\nTips:大部分编辑器都支持多种形式的换行,所以一般感受不到系统间换行符的区别。
本小节内容参考自这篇文章[1]。
下面以在 Mac 中读取一个 windows 中生成的 txt 文件为例,解释 python 下换行符的转换问题。
with open('input.txt','r') as f:
for line in f:
line=line.strip('\r\n')
print str(line)
'r' 读取会保持原来的换行符(\r\n)'rU' 读取会把所有的换行符(\r \n \r\n)替换为 \nstrip 只要头尾包含有指定字符序列中的字符就删除with open('input.txt','r') as f:
for line in f:
line=line.strip('\n')
print(str(line))
open 函数的 newline 参数来控制 Universal new line modenewline,则默认开启 Universal new line mode,所有的 \n, \r, 或 \r\n 被默认转换为 \nnewline,则输出的换行符为各系统默认的换行符(\n, \r, 或 \r\n),如果指定 newline='\n',则换行符都会被替换为 \n(相当于 Universal new line mode)newline='' 都表示不转换[1]
回车与换行: http://www.ruanyifeng.com/blog/2006/04/post_213.html