Python序列化方式:pickle与json探究和应用
使用场景
在程序运行时,数据一般是是存储在堆或者栈上,如果不进行数据持久化,程序结束时,数据也随机消失。通过写文件和存数据库都可以对数据持久化,但这两种方式并不是在所有场景下都适用。
- 先看写文件,如果通过写文件来存储数据,如何存储数据是需要设计下的,诸如用什么符号分隔、正确性能否保证,而其他人想要使用这些数据时,也要非番周折,更不用说使用其他语言来使用这些数据。
- 再看使用数据库存储数据,如何设计字段,依然需要推敲。数据库操作需要使用SQL语句或者封装过的数据库操作模块,对于简单的需求来说略显繁琐。而数据库所需空间远比单纯存储文件大,无论是mongodb、mysql都需要安装并进行一定的配置,在数据迁移方面也显得笨重。
对运行时的数据进行简单地保存,可以用序列化的方式。除此之外,当你需要使用另一种语言来处理同一份数据时,使用json序列化,无疑是通常的做法。
如何使用pickle
pickle是python自有的序列化方式,pickle
模块实现了用于对Python对象结构进行序列化和反序列化协议。
>>> import pickle
>>> d = {"name":"Taylor","age":"29","gender":"female"}
>>> str = pickle.dumps(d)
>>> print(str)
b'\x80\x03}q\x00(X\x06\x00\x00\x00genderq\x01X\x06\x00\x00\x00femaleq\x02X\x03\x00\x00\x00ageq\x03X\x02\x00\x00\x0029q\x04X\x04\x00\x00\x00nameq\x05X\x06\x00\x00\x00Taylorq\x06u.'
python3取消了cpickle,因此引入pickle后,就可以使用pickle模块了。
首先,我创建了一个字典。接着使用pickle.dumps()函数,将字典d序列化成了二进制格式的数据。
>>> with open("dump","wb") as f:
... pickle.