Sup*_*Man 24 python file-io platform-independent separator
Python的os模块包含一个特定于平台的行分隔字符串的值,但是文档明确表示在写入文件时不使用它:
在编写以文本模式打开的文件时,不要将os.linesep用作行终止符(默认值); 在所有平台上使用单个'\n'代替.
以前的问题探讨了为什么你不应该在这种情况下使用它,但那么它有什么用处呢?什么时候应该使用行分隔符,为什么?
Lau*_*RTE 15
文档明确表示在写入文件时不使用它
这不完全正确,医生说不要在文本模式下使用它.
在os.linesep当你想通过一个文本文件的行进行迭代时使用.内部扫描仪识别os.linesep并用一个"\n"替换它.
为了便于说明,我们编写了一个二进制文件,其中包含由"\ r \n"分隔的3行(Windows分隔符):
import io
filename = "text.txt"
content = b'line1\r\nline2\r\nline3'
with io.open(filename, mode="wb") as fd:
fd.write(content)
Run Code Online (Sandbox Code Playgroud)
二进制文件的内容是:
with io.open(filename, mode="rb") as fd:
for line in fd:
print(repr(line))
Run Code Online (Sandbox Code Playgroud)
注意:我使用"rb"模式将文件读取为二进制文件.
我明白了:
b'line1\r\n'
b'line2\r\n'
b'line3'
Run Code Online (Sandbox Code Playgroud)
如果我使用文本模式读取文件的内容,如下所示:
with io.open(filename, mode="r", encoding="ascii") as fd:
for line in fd:
print(repr(line))
Run Code Online (Sandbox Code Playgroud)
我明白了:
'line1\n'
'line2\n'
'line3'
Run Code Online (Sandbox Code Playgroud)
分隔符由"\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")
Run Code Online (Sandbox Code Playgroud)
如果您在文本模式下阅读此文件,如下所示:
with io.open(filename, mode="rb") as fd:
content = fd.read()
print(repr(content))
Run Code Online (Sandbox Code Playgroud)
你得到:
b'one\r\ntwo\r\nthree\r\n'
Run Code Online (Sandbox Code Playgroud)
如您所知,在python中以文本模式读取和写入文件会将特定于平台的行分隔符转换为"\n",反之亦然.但是如果你以二进制模式读取文件,则不会发生转换.然后,您可以使用显式转换行结尾string.replace(os.linesep, '\n').如果文件(或流或其他)包含二进制和文本数据的组合,这将非常有用.
| 归档时间: |
|
| 查看次数: |
16818 次 |
| 最近记录: |