在 Python 2 中读取带有通用换行符的 UTF-8 文件
Reading UTF-8 file with universal newlines in Python 2
我以前用os.open()
读写文本文件。现在我改为使用 codecs.open()
因为我想要 UTF-8 支持。这很有效,但此方法在 Windows 中返回了不同的结果,因为源文件使用了 \r\n
换行符。在我看来,codecs.open()
通用换行符不可用 because it uses binary mode.
我对问题的理解是os.open()
和codecs.open()
具有互斥的特性。 os.open()
在文本模式下具有 universal newline mode 的优点(在阅读的情况下意味着它将任何形式的换行符替换为 \n
),而 codecs.open()
提供UTF-8 支持。
我的目标是将 UTF-8 编码文件读取(最好是写入)为带有通用换行符的 unicode 字符串。这意味着如果我读取两个具有不同换行符的文件,则生成的字符串应该相同。我只想使用具有 Python 2.6 兼容性的核心库来执行此操作。我该如何以最优雅的方式做到这一点?
io.open()
是os.open()
和codecs.open()
的交集。
它为透明字符串提供完整的通用换行支持和 TextWrapper 模式 decode/encode。我认为它与 open()
的 Python 3 实现最相似
用法同codecs.open()
:
my_file = io.open("myfile.txt", "w", encoding="utf-8")
文本模式和通用换行符是默认选项。
我以前用os.open()
读写文本文件。现在我改为使用 codecs.open()
因为我想要 UTF-8 支持。这很有效,但此方法在 Windows 中返回了不同的结果,因为源文件使用了 \r\n
换行符。在我看来,codecs.open()
通用换行符不可用 because it uses binary mode.
我对问题的理解是os.open()
和codecs.open()
具有互斥的特性。 os.open()
在文本模式下具有 universal newline mode 的优点(在阅读的情况下意味着它将任何形式的换行符替换为 \n
),而 codecs.open()
提供UTF-8 支持。
我的目标是将 UTF-8 编码文件读取(最好是写入)为带有通用换行符的 unicode 字符串。这意味着如果我读取两个具有不同换行符的文件,则生成的字符串应该相同。我只想使用具有 Python 2.6 兼容性的核心库来执行此操作。我该如何以最优雅的方式做到这一点?
io.open()
是os.open()
和codecs.open()
的交集。
它为透明字符串提供完整的通用换行支持和 TextWrapper 模式 decode/encode。我认为它与 open()
用法同codecs.open()
:
my_file = io.open("myfile.txt", "w", encoding="utf-8")
文本模式和通用换行符是默认选项。