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

74

我有如下简单的代码:

f = open('out.txt','w')
f.write('line1\n')
f.write('line2')
f.close()

代码在windows上运行时给出文件大小12字节,而在linux上给出11字节。原因是换行符不同。

在linux中是\n,而在Windows中是\r\n

但是在我的代码中,我将新行指定为\n。问题是如何使Python始终保持新行为\n,不检查操作系统。

3个回答

106
你需要以二进制模式打开文件,即使用wb而不是w。如果不这样做,行尾字符将自动转换为特定于操作系统的字符。
以下是有关Python参考文献中open()的摘录。
默认情况下使用文本模式,可能会在写入时将'\n'字符转换为特定于平台的表示形式,并在读取时还原回去。

10
在 Python 3 中,由于字符串没有编码,你需要像这样写outfile.write(bytes(line, "UTF-8")) 来避免出现 TypeError: 'str' does not support the buffer interface 错误。 - Noumenon
4
你不必以二进制模式打开文件,这是解决问题的一种方法,但不是唯一的方法。 - 12431234123412341234123

27

您仍然可以使用文本模式,当您打印字符串时,在打印之前删除最后一个字符,就像这样:

f.write("FooBar"[:-1])

使用Python 3.4.2测试通过。

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


1
我已经按建议定义了 newline,但 f.write() 命令在写入之间不会自动插入它。如何解决? - Nikhil VJ
1
@nikhilvj,请阅读相应的文档:write()不要插入换行符。 - 12431234123412341234123
2
好的,我的错。如果有帮助的话,我发现一旦在open()命令中指定了newline='\r\n'或其他内容,我们就不需要担心在write()命令中放置“正确”的换行符。我们只需要写\n,它将被替换为我们配置的自定义换行符字符串。 - Nikhil VJ

9

4
文档所述,io.open函数只是内置函数open的别名,它们没有任何区别。 - Jeyekomon

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