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

17
Python 2.7文档和Python 3文档中包含有关os.linesep函数的以下行:Python 2.7 documentation(还有Python 3 documentation)。该行指出不要在文本模式下使用os.linesep作为行终止符(默认情况下)。为什么会这样?与在二进制模式下使用它有何不同?

2
@mhlester他们没有解释它,因为这是一个不必要的实现细节。当文件被写入时,所有的\n都会根据你的操作系统转换为os.linesep。当文件被读取时,所有基于你的操作系统的os.linesep都会被转换为\n - Adam Smith
4
如果这是一个“不必要的实现细节”,为什么还要提及它?如果你需要提到它,因为人们正在做错误的事情并且这导致了太多的困惑,那么你可能会解释这个实现细节,并说明为什么不应该使用它。 - blueFast
1个回答

23

以文本模式打开文件时,任何写入文件的 \n 都会被转换为适合所使用平台的相应行结束符。

例如,如果您在 Windows 上,其中 os.linesep'\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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接