为什么 `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.txt
有 CRLF
.
为什么会这样?有没有办法用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
附加参考:
比如说,我们在 Windows 上,我们想要创建一个包含以下内容的文本文件:
hello
world
我们运行
from pathlib import Path
Path('my.txt').write_text('hello\nworld')
并在编辑器中打开新创建的 my.txt
。我期待它显示 LF
,因为我们的字符串中有 \n
(而不是 \r\n
)。令我惊讶的是,我的编辑向我展示了 my.txt
有 CRLF
.
为什么会这样?有没有办法用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
附加参考: