为什么 `write_text` 似乎使用 CRLF 而不是 LF?

Why does `write_text` appear to use CRLF and not LF?

比如说,我们在 Windows 上,我们想要创建一个包含以下内容的文本文件:

hello
world

我们运行

from pathlib import Path
Path('my.txt').write_text('hello\nworld')

并在编辑器中打开新创建的 my.txt。我期待它显示 LF,因为我们的字符串中有 \n(而不是 \r\n)。令我惊讶的是,我的编辑向我展示了 my.txtCRLF.

为什么会这样?有没有办法用write_text写成LF

您看到的是 Python 的 newline mapping feature(请参阅链接的 open 文档中的 newline)。

Path().write_text()实现如下,所以你看不能把newline设置成'\n'或者'':

    def write_text(self, data, encoding=None, errors=None):
        with self.open(mode='w', encoding=encoding, errors=errors) as f:
            return f.write(data)

您需要手动设置 newline

with Path('my.txt').open('w', newline='\n') as f:
    f.write('hello\nworld')

Python 3.10 (2021-10-04) 现在支持 newline 参数。所以现在你可以这样做:

Path('my.txt').write_text('hello\nworld', newline='\n')

参考:

Path.write_text(data, encoding=None, errors=None, newline=None)

https://docs.python.org/3/library/pathlib.html#pathlib.Path.write_text

附加参考:

https://bugs.python.org/issue23706