- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
文本和二进制文件
文本文件
当一个文件以文本模式打开的时候,读取其数据会自动将其内容解码(每个平台一个默认的或一个提供的编码名称),并且将其返回为一个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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论