第9章 序列化和保存——JSON、YAML、Pickle、CSV和XML

为了存储Python中的对象,必须先将其转换为字节,然后再将字节写入文件。这个过程称为序列化,又叫作数据转换(marshaling)、压缩(deflating)或编码(encoding)。接下来我们会介绍几种将一个Python对象转换为字符串或字节流的方式。

每种序列化方式又称为物理数据格式,每种格式各有优缺点。对于呈现对象的方式而言,没有所谓最好的格式。我们需要和逻辑数据格式区分开,它只是简单地将字节流重新排列或改变空格的使用方式,而并未改变对象的值,只是对字节流的操作。

比较重要的一点是(尤其是CSV格式),这些表达方式只是在表达一个单一的Python对象。然而这个单一的对象可以是一组对象的集合,范围是固定的。为了处理这些对象中的一个,必须对整个集合进行反序列化,完成增量序列化需要额外的工作量。不必下太多工夫在如何使用不同格式处理多个对象的序列化,第10章“用Shelve保存和获取对象”、第11章“用SQLite保存和获取对象”和第12章“传输和共享对象”会介绍更好的方式来处理多个不同的对象。

正因为这些方式中的每一个都是针对单一的对象,所以我们无法在对象集合的内存使用方面做太多的控制。当需要处理大量不同的项时,并不能一次性把它们加载到内存,我们无法直接使用这些技术。这时,就需要移至更大的数据库、服务器或消息队列中。现在我们来了解如下几种序列化的表示方式。

  • JavaScript Object Notation(JSON):这是一种被广泛使用的表示方式。更多信息可以参见:http://www.json.orgjson模块提供了用于加载和转储数据所需要的类与函数,都是关于json格式操作。在Python标准库中,可以看一下第19节“网络数据处理”,而不是第12节“存储”。与一般的Python对象的存储问题相比, ...

Get Python面向对象编程指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.