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

Python 如何在Windows中编写Unix行尾字符?,python,newline,Python,Newline,如何使用Python(在Windows上)写入文件并使用Unix行结束字符 e、 g.在进行下列工作时: f = open('file.txt', 'w') f.write('hello\n') f.close() f=打开('file.txt','w') f、 写入('hello\n') f、 关闭() Python会自动将\n替换为\r\n打开文件时需要使用二进制伪模式 f = open('file.txt', 'wb') 对于Python2和Python3 请参阅本页的答案 仅适用于Py

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

e、 g.在进行下列工作时:

f = open('file.txt', 'w') f.write('hello\n') f.close() f=打开('file.txt','w') f、 写入('hello\n') f、 关闭()
Python会自动将
\n
替换为
\r\n

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

f = open('file.txt', 'wb')
对于Python2和Python3 请参阅本页的答案

仅适用于Python 2(原始答案) 以二进制方式打开文件,以防止转换行尾字符:

f = open('file.txt', 'wb')
f = open('file.txt', 'wb')    # note the 'b' meaning binary
引用Python手册:

在Windows上,附加到模式的“b”以二进制模式打开文件,因此也有类似“rb”、“wb”和“r+b”的模式。Windows上的Python区分了文本文件和二进制文件;在读取或写入数据时,文本文件中的行尾字符会自动轻微更改。这种对文件数据的幕后修改对于ASCII文本文件来说很好,但它会破坏JPEG或EXE文件中的二进制数据。在读取和写入此类文件时,请非常小心地使用二进制模式。在Unix上,在模式中附加一个“b”并没有什么坏处,因此您可以在所有二进制文件中独立使用it平台

现代方式:使用换行符=“” 使用
newline=
关键字参数使用Unix样式的LF行结束符:

import io
f = io.open('file.txt', 'w', newline='\n')
这适用于Python 2.6+。在Python3中,还可以使用内置的
open()
函数的
newline=
参数,而不是
io.open()

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

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

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

这有助于我使用它:#newline=''表示不转换\n您可以将newline设置为
'\n'
直接,这比
'
更明确,而且我认为更容易阅读。@124312344123441234123我同意,使用
'\n'
'
更清晰。那么我就不需要注释来解释代码在做什么:),但要知道,这只适用于编写文件。在读取文件时,
newline='\n'
newline=''
并不完全相同,因为在前一种情况下,
readlines()
将仅在
\n
上拆分,但使用
newline='
它将执行通用换行处理,但仍然会从数据中的文件返回实际换行。谢谢你的建议!Python3.6+(也可能是以前的Python3版本)。如果您有点担心看到以前切换过的相同的
'\n'
,您可以使用Unicode代码点(确保编码是utf-8或其他兼容的)<代码>打开('file.txt','w',encoding='utf-8',换行符='\u000A');另外,结果与
newline='\n'
版本没有任何不同,这只是如果有人想要更多的舒适。