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

ttt*_*ppp 69 python newline

如何使用Python(在Windows上)写入文件并使用Unix行尾字符?

例如,当做:

f = open('file.txt', 'w')
f.write('hello\n')
f.close()

Python自动用\ r \n替换\n.

Col*_*ett 85

现代方式:使用newline =''

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

import io
f = io.open('file.txt', 'w', newline='\n')
Run Code Online (Sandbox Code Playgroud)

这适用于Python 2.6+.在Python 3中,您也可以使用内置open()函数的newline=参数而不是io.open().

旧方式:二进制模式

防止换行转换的旧方法(在Python 3中不起作用)是以二进制模式打开文件以防止转换行尾字符:

f = open('file.txt', 'wb')    # note the 'b' meaning binary
Run Code Online (Sandbox Code Playgroud)

但在Python 3中,二进制模式将读取字节而不是字符,因此它不会执行您想要的操作.当您尝试在流上执行字符串I/O时,您可能会遇到异常.(例如"TypeError:'str'不支持缓冲区接口").


Tam*_*más 61

对于Python 2和3

请参阅:现代方式:在此页面上使用newline =''答案.

仅限Python 2(原始答案)

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

f = open('file.txt', 'wb')
Run Code Online (Sandbox Code Playgroud)

引用Python手册:

在Windows上,附加到模式的'b'以二进制模式打开文件,因此还有'rb','wb'和'r + b'等模式.Windows上的Python区分了文本和二进制文件; 读取或写入数据时,文本文件中的行尾字符会自动稍微改变.这种对文件数据的幕后修改适用于ASCII文本文件,但它会破坏像JPEG或EXE文件中的二进制数据.在读取和写入此类文件时要非常小心地使用二进制模式.在Unix上,将'b'附加到模式没有什么坏处,因此您可以独立于平台使用它来处理所有二进制文件.


Jon*_*erg 8

打开文件时,您需要使用二进制伪模式.

f = open('file.txt', 'wb')
Run Code Online (Sandbox Code Playgroud)