为什么你不应该在文本模式下编辑时使用os.linesep?

时间:2014-02-07 19:29:41

标签: python

Python 2.7 documentation(以及Python 3 documentation)包含有关os.linepath函数的以下行:

  

在打开文件时,不要将os.linesep用作行终止符   在文本模式下(默认);

为什么?它与在二进制模式下使用它有何不同?

1 个答案:

答案 0 :(得分:19)

当您以文本模式打开文件时,您写入文件的任何\n都将转换为您正在使用的平台的相应行。

因此,例如,如果您在os.linesep'\r\n'的Windows上,当您将其写入文件时,\n将自动转换为\r\n并且您最终会将\r\r\n写入您的文件。

例如:

>>> import os
>>> os.linesep
'\r\n'
>>> with open('test.txt', 'w') as f:
...     f.write(os.linesep)
...
>>> with open('test.txt', 'rb') as f:
...     print repr(f.read())
...
'\r\r\n'