序列化指的是将Python对象转为我们需要存储或者传输的格式,然后在需要时使用反序列化重新创建对象。
有人会说,这还不简单,直接把要保持的字符串或者整数写入文件就可以了。但是这种方式只能针对简单的数据格式,无法保存复杂的对象。
Python中有常见的三种序列化的方法:JSON、Pickle和HDF5,下面我们来介绍它们。
引言
本文介绍三种序列化方法,本文主要分为以下几个部分。
1、JSON序列化
2、Pickle序列化
3、HDF5序列化
JSON序列化
这种序列化方法最为常见,也是使用最多的方法之一。它能够将字典或者列表以明文的方式保存下来,但是对于复杂的Python对象,就无能为力了。
json.dumps能够将字典或者列表序列化,而json.loads能够将其反序列化。
大家对这种方式应该比较熟悉,这里不再举例。
Pickle序列化
Pickle序列化能够弥补JSON序列化的不足,它能够将任意Python对象序列化,包括你自己定义的对象、甚至函数定义也可以序列化。但是它的不足是存储方式为二进制,而非明文,对人类肉眼不友好。
下面是使用pickle进行序列化和反序列化的一个例子。
我们也可以用它来序列化和反序列化机器学习中的模型,例如下面这个例子。
HDF5序列化
有了Pickle序列化,为啥还需要HDF5序列化?因为Pickle反序列化时,无法只反序列化部分,必须将整体对象一起反序列化了,对于内存不足的情况,这种方式就很不又好了。而HDF5能够很好的解决这个问题。
HDF5可以让你存储大量数字的数据,并轻松地利用Numpy来操作这些数据。
这个库非Python自带的库,需要使用pip install hdf5来安装。
下面是一个例子。
这将在 test.hdf5的test_dataset的文件中创建一个形状为 (100, ) 且类型为 int32 的新数据集。 h5py 数据集遵循 Numpy 语法,因此可以执行切片、检索、获取形状等操作,类似于 Numpy 数组。例如dataset[0],dataset[:10]等
在 Tensorflow Keras 中,也经常使用 HDF5 格式保存模型。我们可以使用 .h5后缀文件 来保存模型,如下所示: