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


79

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

例如:

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

Python自动替换\n\r\n

Answers:


65

对于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'附加到该模式没有什么坏处,因此您可以将其独立地用于所有二进制文件。


96

现代方式:使用newline =''

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

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

这适用于Python 2.6+。在Python 3中,您还可以使用内置open()函数的newline=参数代替io.open()

旧方法:二进制模式

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

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

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


1
使用以下代码可以帮助我:
#newline

您可以将换行符设置为'\n'direct,这比更加显式'',而且我认为它更易于阅读。
12431234123412341234123

1
@ 12431234123412341234123我同意,使用'\n'方法比清晰''。然后,我不需要注释来解释代码在做什么:)但是请注意,这仅适用于编写文件。读取文件时,newline='\n'与并不完全相同newline='',因为readlines()\n在前一种情况下会拆分,newline=''但它将进行通用的换行处理,但仍会从数据中的文件中返回实际的换行符。谢谢你的建议! Python测试程序
Colin D Bennett

Python 3.6以上版本(也可能是以前的Python3版本)。如果您担心看到'\n'以前已切换的内容,可以使用Unicode代码点(确保编码为utf-8或其他兼容格式)。with open('file.txt', 'w', encoding='utf-8', newline='\u000A'); PS的结果与newline='\n'版本没有什么不同,这只是有人想要更多的舒适感。
bballdave025

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.