'\n' == 'posix' , '\r\n' == 'nt' (python) 对吗?

'\n' == 'posix' , '\r\n' == 'nt' (python) is that correct?

我正在编写一个 python(2.7) 脚本,该脚本写入一个文件并且必须在 linux、windows 和 osx 上 运行 . 不幸的是,由于兼容性问题,我必须使用回车 return 和 windows 样式的换行符。 如果我假设可以吗:

str = someFunc.returnA_longText()
with open('file','w') as f:
    if os.name == 'posix':
        f.write(str.replace('\n','\r\n'))
    elif os.name == 'nt'
        f.write(str)    
    

我需要考虑其他人吗? os.name 还有其他选择('posix'、'nt'、'os2'、'ce'、'java'、'riscos')。我应该改用平台模块吗?

更新 1:

  1. 目标是在任何 OS.

    中使用“\r\n”
  2. 我正在接收来自

    的 str

    str = etree.tostring(root, pretty_print=True, xml_declaration=真,编码='UTF-8')

我没有在读取文件。
3. 我的错,我应该检查 os.linesep 而不是?

Python 文件对象可以为您处理。默认情况下,写入文本模式文件会将 \n 行结尾转换为本地平台,但您可以覆盖此行为。

参见open() function documentation中的newline选项:

newline controls how universal newlines mode works (it only applies to text mode). It can be None, '', '\n', '\r', and '\r\n'. It works as follows:

  • When reading input from the stream, if newline is None, universal newlines mode is enabled. Lines in the input can end in '\n', '\r', or '\r\n', and these are translated into '\n' before being returned to the caller. If it is '', universal newlines mode is enabled, but line endings are returned to the caller untranslated. If it has any of the other legal values, input lines are only terminated by the given string, and the line ending is returned to the caller untranslated.
  • When writing output to the stream, if newline is None, any '\n' characters written are translated to the system default line separator, os.linesep. If newline is '' or '\n', no translation takes place. If newline is any of the other legal values, any '\n' characters written are translated to the given string.

(以上适用于 Python 3,Python 2 有 similar behaviour, with io.open() 给你 Python 3 I/O 选项,如果需要)。

如果需要强制写入行尾,请设置 newline 选项:

with open('file', 'w', newline='\r\n') as f:

在 Python 2 中,您必须以二进制模式打开文件:

with open('file', 'wb') as f:
    # write `\r\n` line separators, no translation takes place

或使用 io.open() 并写入 Unicode 文本:

import io

with io.open('file', 'w', newline='\r\n', encoding='utf8') as f:
     f.write(str.decode('utf8'))

(但要选择适当的编码;即使在 Python 3 中,明确指定编解码器始终是个好主意)。

如果您的程序需要知道适合当前平台的行分隔符,您始终可以使用 os.linesep constant