- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Python 的 os 模块包含一个平台特定行分隔字符串的值,但文档明确表示在写入文件时不要使用它:
Do not use os.linesep as a line terminator when writing files opened in text mode (the default); use a single '\n' instead, on all platforms.
Previous questions已经探讨了为什么您不应该在这种情况下使用它,但是它对什么情况有用?什么时候应该使用行分隔符?用于什么目的?
最佳答案
the docs explicitly say not to use it when writing to a file
不完全是。文档说不要在 text 模式下使用它。
os.linesep
用于遍历文本文件的行。内部扫描器识别 os.linesep
并将其替换为单个 \n
。
为了说明,我们编写了一个二进制文件,其中包含由 \r\n
(Windows 分隔符)分隔的 3 行:
import io
filename = "text.txt"
content = b'line1\r\nline2\r\nline3'
with io.open(filename, mode="wb") as fd:
fd.write(content)
二进制文件的内容是:
with io.open(filename, mode="rb") as fd:
for line in fd:
print(repr(line))
注意:我使用 "rb"
模式将文件读取为二进制文件。
我明白了:
b'line1\r\n'
b'line2\r\n'
b'line3'
如果我使用文本模式读取文件的内容,像这样:
with io.open(filename, mode="r", encoding="ascii") as fd:
for line in fd:
print(repr(line))
我明白了:
'line1\n'
'line2\n'
'line3'
分隔符替换为\n
。
os.linesep
也用于写模式。任何 \n
字符都将转换为系统默认的行分隔符:Windows 上为 \r\n
,POSIX 上为 \n
等等。
使用 io.open
函数,您可以将行分隔符强制为任何您想要的。
示例:如何编写 Windows 文本文件:
with io.open(filename, mode="w", encoding="ascii", newline="\r\n") as fd:
fd.write("one\ntwo\nthree\n")
如果您以这样的文本模式阅读此文件:
with io.open(filename, mode="rb") as fd:
content = fd.read()
print(repr(content))
你得到:
b'one\r\ntwo\r\nthree\r\n'
关于python - os.linesep 是干什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38074811/
Python 2.7 documentation (以及 Python 3 documentation)包含以下关于 os.linepath 函数的行: Do not use os.linesep a
Python 的 os 模块包含一个平台特定行分隔字符串的值,但文档明确表示在写入文件时不要使用它: Do not use os.linesep as a line terminator when w
我是一名优秀的程序员,十分优秀!