【发布时间】:2011-02-01 22:53:07
【问题描述】:
如何使用 Python(在 Windows 上)写入文件并使用 Unix 行尾字符?
例如做的时候:
f = open('file.txt', 'w') f.write('你好\n') f.close()Python 会自动将 \n 替换为 \r\n。
【问题讨论】:
如何使用 Python(在 Windows 上)写入文件并使用 Unix 行尾字符?
例如做的时候:
f = open('file.txt', 'w') f.write('你好\n') f.close()Python 会自动将 \n 替换为 \r\n。
【问题讨论】:
使用 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 中不起作用,即以 binary 模式打开文件以防止转换行尾字符:
f = open('file.txt', 'wb') # note the 'b' meaning binary
但在 Python 3 中,二进制模式将读取 bytes 而不是 characters,因此它不会执行您想要的操作。当您尝试在流上执行字符串 I/O 时,您可能会遇到异常。 (例如“TypeError: 'str' 不支持缓冲区接口”)。
【讨论】:
'\n',这个比''更明确,我觉得更容易阅读。
'\n' 比'' 更清晰。然后我不需要评论来解释代码在做什么:) 但请注意,这仅适用于编写文件。读取文件时,newline='\n' 与 newline='' 不完全相同,因为在前一种情况下,readlines() 只会在 \n 上拆分,但在使用 newline='' 时,它会进行通用换行处理,但仍会返回实际的换行符从数据中的文件。感谢您的建议! Python test program
'\n',您可以使用 Unicode 代码点(确保编码是 utf-8 或其他兼容的)。 with open('file.txt', 'w', encoding='utf-8', newline='\u000A') ;附言结果与newline='\n' 版本没有任何不同,这只是如果有人想要更多舒适。
请参阅:The modern way: use newline='' 此页面上的答案。
以二进制形式打开文件以防止转换行尾字符:
f = open('file.txt', 'wb')
引用 Python 手册:
在 Windows 上,附加到模式的 'b' 以二进制模式打开文件,因此还有 'rb'、'wb' 和 'r+b' 等模式。 Windows 上的 Python 区分了文本文件和二进制文件;读取或写入数据时,文本文件中的行尾字符会自动稍作更改。这种对文件数据的幕后修改适用于 ASCII 文本文件,但它会破坏 JPEG 或 EXE 文件中的二进制数据。在读写此类文件时要非常小心使用二进制模式。在 Unix 上,将 'b' 附加到模式并没有什么坏处,因此您可以独立于平台使用它来处理所有二进制文件。
【讨论】:
打开文件时需要使用二进制伪模式。
f = open('file.txt', 'wb')
【讨论】: