如何强制Python的file.write()在Windows中使用与Linux中相同的换行符格式("\ r \n"与"\n")?

use*_*478 59 python newline

我有简单的代码:

f = open('out.txt','w')
f.write('line1\n')
f.write('line2')
f.close()
Run Code Online (Sandbox Code Playgroud)

代码在Windows上运行并给出文件大小12 bytes,而linux给出11 bytes 的原因是新行

在Linux中它是\n胜利的\r\n

但在我的代码中,我将新行指定为\n.问题是如何让python像\n往常一样保持新行,而不是检查操作系统.

Pra*_*ota 92

您需要打开文件的二进制模式,即wb代替w.如果不这样,行尾字符将自动转换为特定于操作系统的字符.

以下是Python参考的摘录open().

默认设置是使用文本模式,可以在写入时将"\n"字符转换为特定于平台的表示,并在读取时返回.

  • 在 Python 3 中,由于字符串未编码,您需要使用类似 `outfile.write(bytes(line, "UTF-8"))` 的内容来编写它们,以避免出现 `TypeError: 'str' 不支持缓冲区界面`。 (3认同)
  • 您不需要以二进制模式打开文件,这是解决该问题的一种方法,但不是唯一的方法 (2认同)

124*_*123 17

您仍然可以使用textmode并使用关键字参数newline强制换行换行符

f = open("./foo",'w',newline='\n')
Run Code Online (Sandbox Code Playgroud)

用Python 3.4.2测试.

编辑:这在Python 2.7中不起作用.

  • 好吧,我的错。如果有帮助的话,我发现一旦 `newline='\r\n'` 或在 open() 命令中指定了任何内容,我们就不需要担心将“正确的”换行符放入 `write()` 中命令。我们只需要说“\n”,它将被我们配置的自定义换行符字符串替换。 (2认同)

Leo*_*rdo 11

这是一个旧答案,但该io.open函数允许您指定行结尾:

import io
with io.open('tmpfile', 'w', newline='\r\n') as f:
    f.write(u'foo\nbar\nbaz\n')
Run Code Online (Sandbox Code Playgroud)

来自: https: //stackoverflow.com/a/2642121/6271889

  • 正如[文档](https://docs.python.org/3/library/io.html#io.open)所述,函数 `io.open` 只是内置函数 [`open `](https://docs.python.org/3/library/functions.html#open)。它们之间没有区别。 (5认同)