返回介绍

文本和二进制文件

发布于 2024-01-29 22:24:14 字数 1451 浏览 0 评论 0 收藏 0

文件I/O(输入和输出)在Python 3.0中也有所改进,以反映str/bytes的区分以及对编码Unicode文本的自动支持。Python现在在文本文件和二进制文件之间做了一个明显的独立于平台的区分:

文本文件

当一个文件以文本模式打开的时候,读取其数据会自动将其内容解码(每个平台一个默认的或一个提供的编码名称),并且将其返回为一个str,写入会接受一个str,并且在将其传输到文件之间自动编码它。文本模式的文件还支持统一的行尾转换和额外的编码特定参数。根据编码名称,文本文件也自动处理文件开始处的字节顺序标记序列(稍后详细介绍)。

二进制文件

通过在内置的open调用的模式字符串参数添加一个b(只能小写),以二进制模式打开一个文件的时候,读取其数据不会以任何方式解码它,而是直接返回其内容raw并且未经修改,作为一个bytes对象;写入类似地接受一个bytes对象,并且将其传送到文件中而未经修改。二进制模式文件也接受一个bytearray对象作为写入文件中的内容。

由于str和bytes之间的语言差距明显,所以必须确定数据本质上是文本或二进制,并且在脚本中相应地使用str或bytes对象来表示其内容。最终,以何种模式打开一个文件将决定脚本使用何种类型的对象来表示其内容:

·如果正在处理图像文件,其他程序创建的、而且必须解压的打包数据,或者一些设备数据流,则使用bytes和二进制模式文件处理它更合适。如果想要更新数据而不在内存中产生其副本,也可以选择使用bytearray。

·如果你要处理的内容实质是文本的内容,例如程序输出、HTML、国际化文本或CSV或XML文件,可能要使用str和文本模式文件。

注意,内置函数open的模式字符串参数(函数的第二个参数)在Python 3.0中变得至关重要,因为其内容不仅指定了一个文件处理模式,而且暗示了一个Python对象类型。通过给模式字符串添加一个b,我们可以指定二进制模式,并且当读取或写入的时候,将要接收或者必须提供一个bytes对象来表示文件的内容。没有b,我们的文件将以文本模式处理,并且将使用str对象在脚本中表示其内容。例如,模式r b、w b和r b+暗示bytes,而r、w+和rt暗示str。

文本模式文件也处理在某种编码方案下可能出现在文件开始处的字节顺序标记(byte order marker,BOM)序列。例如,在UTF-16和UTF-32编码中,BOM指定大尾还是小尾格式(基本上,是确定一个位字符串的哪一端最重要)。一般来说,一个UTF-8文本文件也包含了一个BOM来声明它是UTF-8,但并不保证这样。当使用这些编码方法来读取和写入数据的时候,如果BOM有一个通用的编码暗示或者如果提供一个更为具体的编码名来强制这点的话,Python会自动省略或写出BOM。例如,BOM总是针对"utf-16"处理,更具体的编码名"utf-16-le"表示小尾UTF-16格式,更具体的编码名"utf-8-sig"迫使Python在输入和输出上分别都针对UTF-8文本省略并写入一个BOM(通用名称"utf-8"并不这么做)。

我们还将在本章后面的“在Python 3.0中处理BOM”一节中介绍更多有关BOM和文件的内容。首先,让我们探讨Python的新的Unicode字符串模型的含义。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文