Python os.linesep的用途是什么?

Python os.linesep的用途是什么?,python,file-io,separator,platform-independent,Python,File Io,Separator,Platform Independent,Python的操作系统模块包含一个特定于平台的行分隔字符串的值,但文档明确表示在写入文件时不要使用该值: 写入以文本模式打开的文件时,不要将os.linesep用作行终止符(默认设置);在所有平台上改用单个“\n” 我们已经探讨了为什么不应该在这个上下文中使用它,但是它对什么上下文有用呢?什么时候应该使用行分隔符,用于什么?如您所知,在python中以文本模式读取和写入文件会将特定于平台的行分隔符转换为“\n”,反之亦然。但如果您要以二进制模式读取文件,则不会发生转换。然后,可以使用strin

Python的操作系统模块包含一个特定于平台的行分隔字符串的值,但文档明确表示在写入文件时不要使用该值:

写入以文本模式打开的文件时,不要将os.linesep用作行终止符(默认设置);在所有平台上改用单个“\n”


我们已经探讨了为什么不应该在这个上下文中使用它,但是它对什么上下文有用呢?什么时候应该使用行分隔符,用于什么?

如您所知,在python中以文本模式读取和写入文件会将特定于平台的行分隔符转换为“\n”,反之亦然。但如果您要以二进制模式读取文件,则不会发生转换。然后,可以使用
string.replace(os.linesep,“\n')
显式转换行尾。如果文件(或流或任何内容)包含二进制数据和文本数据的组合,这将非常有用

文档明确表示在写入文件时不要使用它

这不准确,医生说不要在文本模式下使用它

当您想要遍历文本文件的行时,可以使用
os.linesep
。内部扫描仪识别
os.linesep
,并将其替换为一个“\n”

为了进行说明,我们编写了一个二进制文件,其中包含由“\r\n”(Windows分隔符)分隔的3行:

二进制文件的内容是:

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'
'line1\n'
'line2\n'
'line3'
如果我使用文本模式读取文件内容,如下所示:

with io.open(filename, mode="r", encoding="ascii") as fd:
    for line in fd:
        print(repr(line))
with io.open(filename, mode="rb") as fd:
    content = fd.read()
    print(repr(content))
我得到:

b'line1\r\n'
b'line2\r\n'
b'line3'
'line1\n'
'line2\n'
'line3'
分隔符被替换为“\n”

os.linesep
也用于写入模式:任何“\n”字符都将转换为系统默认的行分隔符:“\r\n”在Windows上,“\n”在POSIX上,等等

使用
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="r", encoding="ascii") as fd:
    for line in fd:
        print(repr(line))
with io.open(filename, mode="rb") as fd:
    content = fd.read()
    print(repr(content))
你会得到:

b'one\r\ntwo\r\nthree\r\n'

如果编码是ascii不兼容的,它就不起作用<代码>长度('\n'.encode('utf-16'))为4