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


问题内容

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

写入以文本模式打开的文件时,请不要使用os.linesep作为行终止符(默认);

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


问题答案:

当您以文本模式打开文件时\n,您写入该文件的任何内容都会转换为所使用平台的相应行结尾。

因此,例如,如果您在Windows上的os.linesepis是'\r\n',当您将其写入文件时,\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'