如何在Windows中使用Python编写Unix行尾字符

我怎样才能使用Python(在Windows上)写文件,并使用行尾字符?

例如在做:

 f = open('file.txt','w')
 f.write( '你好\ N')
 f.close()

Python会自动用\ r \ nreplace\ n。

对于Python 2&3

请参阅: 现代方法:在这个页面上使用newline =''答案。

仅适用于Python 2(原始答案)

以二进制打开文件以防止行尾字符的转换:

f = open('file.txt', 'wb') 

引用Python手册:

在Windows上,附加到模式的“b”以二进制模式打开文件,所以也有像“rb”,“wb”和“r + b”这样的模式。 Windows上的Python区分文本和二进制文件; 数据读取或写入时,文本文件中的行尾字符会自动稍微改变。 这种对文件数据的后台修改对于ASCII文本文件来说是很好的,但是它会破坏像JPEG或者EXE文件那样的二进制数据。 读取和写入这些文件时要非常小心地使用二进制模式。 在Unix上,在模式中附加一个'b'并不会造成什么影响,所以你可以在所有的二进制文件中使用它。

现代的方式:使用newline =''

使用newline= keyword参数来使用io.open()来使用Unix风格的LF行尾终止符:

 import io f = io.open('file.txt', 'w', newline='\n') 

这在Python 2.6+中起作用。 在Python 3中,你也可以使用内build的open()函数的newline=参数来代替io.open()

旧的方式:二进制模式

防止换行的旧方法在Python 3中不起作用,即以二进制模式打开文件以防止换行符:

 f = open('file.txt', 'wb') # note the 'b' meaning binary 

但在Python 3中,二进制模式将读取字节而不是字符,所以它不会做你想做的。 当您尝试在stream上执行stringI / O时,您可能会遇到exception。 (例如“TypeError:'str'不支持缓冲区接口”)。

打开文件时需要使用二进制伪模式。

 f = open('file.txt', 'wb')