Python 如何在Windows中编写Unix行尾字符?
如何使用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 如何在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会自动将
\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'
版本没有任何不同,这只是如果有人想要更多的舒适。