一、前言:
pickle模块作用是将对象进行序列化然后存储或者反序列化为对象。
为什么要序列化和反序列化呢?
数据序列化就是将对象或者数据结构转化成特定的格式,使其可在网络中传输,或者可存储在内存或者文件中。
反序列化则是相反的操作,将对象从序列化数据中还原出来。而对象序列化后的数据格式可以是二进制,可以是XML,也可以是JSON等任何格式。
是持久化的储存数据,实现了基本的数据序列和反序列化。能将任意一个Python对象转换成一系统字节的这个操作过程叫做串行化对象。
通过pickle模块的序列化操作,可以将对象信息保存到文件中去,是永久存储哦;
通过pickle模块的反序列化操作,可以从文件中创建上一次程序保存的对象。
二、Pickle与CPickle对比
Pickle是完全用Python来实现的模块
CPickle是用C来实现的,它的速度要比pickle快好多倍,一般建议如果电脑中只要有CPickle的话都应该使用它
使用Python2的小伙伴引入时可采用如下模版代码:
而cPickle在python3中更名为pickle了,所以使用Python3的小伙伴直接倒入pickle即可。
三、pickle使用介绍
基本接口:
1、pickle.dump(obj, file, [,protocol]):将对象obj保存到文件file中去。
参数解析:
obje:需要保存的数据对象
file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以’w’方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
2、pickle.load(file):从file中读取一个字符串,并将它重构为原来的python对象。
参数解析:
file:类文件对象,有read()和readline()接口。
四、示例代码
1、我们编写一个saveData1方法,该方法调用 pickle.dump(save, fp)直接传入存储的对象和文件
2、我们再编写一个saveData2方法,结果是一样的,只不过我们先调用吗pickle.dumps(save)获取序列化的数据,然后再调用file的write方法写入数据
3、最后写两个loadData1和loadData2用来读取已序列化的数据
示例代码如下:
结果输出如下:
如上我们便学习了pickle的简单使用
学过java等语言的小伙伴此时或许体会到python的简洁性了。
后面有需要需要序列化存储数据的需求就可以使用pickle了哦,感谢你的观看。