【问题标题】:Why you shouldn't use os.linesep when editing on text mode?为什么在文本模式下编辑时不应该使用 os.linesep?
【发布时间】:2014-02-07 19:29:40
【问题描述】:

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

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

这是为什么呢?和在二进制模式下使用有什么不同?

【问题讨论】:

  • @mhlester 他们没有解释它,因为这是一个不必要的实现细节。写入文件时,所有\n 都将根据您的操作系统转换为os.linesep。读取文件时,所有基于您的操作系统的os.linesep 都将转换为\n
  • @AdamSmith:如果它是“不必要的实现细节”,为什么要提到它?如果你需要提及它,因为人们做错了事情,这造成了太多的混乱,你不妨解释一下实现细节,以及为什么你不应该使用它......

标签: python


【解决方案1】:

当您以文本模式打开文件时,您写入文件的任何\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'

【讨论】:

    猜你喜欢
    • 2021-08-08
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多