如何在Windows中写Unix换行符?
我怎么能在Windows上用Python写文件,并且使用Unix的换行符呢?
比如,当我这样做的时候:
f = open('file.txt', 'w') f.write('hello\n') f.close()
Python会自动把 \n
替换成 \r\n
。
4 个回答
10
打开文件时,你需要使用二进制伪模式。
f = open('file.txt', 'wb')
130
现代方法:使用 newline=''
使用 newline=
这个参数来调用 io.open(),这样可以使用 Unix 风格的换行符:
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 中,二进制模式会读取 字节 而不是 字符,所以它不能达到你想要的效果。当你尝试在这个流上进行字符串输入输出时,可能会出现异常(比如 "TypeError: 'str' does not support the buffer interface")。
69
适用于 Python 2 和 3
可以查看:现代方法:使用 newline='' 这个答案。
仅适用于 Python 2(原始答案)
以二进制模式打开文件,这样可以避免换行符被转换:
f = open('file.txt', 'wb')
引用 Python 手册:
在 Windows 系统上,模式后面加上 'b' 会以二进制模式打开文件,所以还有 'rb'、'wb' 和 'r+b' 这样的模式。Python 在 Windows 上区分文本文件和二进制文件;文本文件中的换行符在读取或写入时会自动稍微改变。这种对文件数据的后台修改对于 ASCII 文本文件是没问题的,但会损坏像 JPEG 或 EXE 文件这样的二进制数据。因此,在读取和写入这些文件时,一定要小心使用二进制模式。在 Unix 系统上,模式后加 'b' 也不会有坏处,所以你可以在所有二进制文件中跨平台使用它。