如何在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')