0
Posted on 23:40:00 by Unknown and filed under
Python
行结束符
一个文本文件是由行组成的,本文所说的就是行与行之间用来表示新行(newline)的间隔,一般称作断行符(link break)或者行结束符(end-of-line, EOF)。
由于历史的原因,不同的操作系统用来表示换行的字符不同,这就给跨操作系统编辑文件带来不便。
操作系统中的差异
使用下面的 Unicode 标准定义的符号:
- LF: Line Feed, U+000A, '\n'
- CR: Carriage Return, U+000D, '\r'
不同的操作系统使用的行结束符:
- Windows 使用 CR+LF,也就是 '\r\n'
- Linux/Unix 系列使用 LF,也就是 '\n'
特别的,目前 Mac OS X 是基于 Unix 的,所以行结束符也是 LF。只有 v9 之前 Mac OS 才是用 '\r'。
历史
为什么对“另起一行”的处理有这样的差异,是因为早期的电传打字机(teletype)从左至右打完一行的时候,需要给打印机头重新移回左边界的时间,在一个字符的时间内,不足以让打印机头移动到正确的位置,这样会影响下一个字符的打印。所以就需要在一行结束的时候额外传递一个 CR 字符令装置 carriage 归位。
进一步阅读:Wikipedia: Newline。
对不同换行符的处理
一般操作系统的运行库决定了文本文件的换行格式,在一个平台上使用另一种换行符的文件通常会有问题。大部分编辑器会自动识别换行符类型,并带有换行转换的功能。
比如某些 FTP 软件在进行文本传输的时候会对换行符进行转换(这样修改了原文件)。
Python 使用 "Universal Newline" 处理这个问题。在以文本方式 open() 的时候,会对换行符进行识别并一致处理成 '\n',在文件写入的时候,也只要 write('\n') 即可,Python 会根据操作系统自动处理。有关文档:
- http://docs.python.org/library/stdtypes.html#file.newlines
- http://docs.python.org/library/functions.html#open
本文 github 中的镜像。
发表评论