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