Python简单好用又强大的数据持久化工具
目录
一、前言:
- pickle模块作用是将对象进行序列化然后存储或者反序列化为对象。
- 为什么要序列化和反序列化呢?
- 数据序列化就是将对象或者数据结构转化成特定的格式,使其可在网络中传输,或者可存储在内存或者文件中。
- 反序列化则是相反的操作,将对象从序列化数据中还原出来。而对象序列化后的数据格式可以是二进制,可以是XML,也可以是JSON等任何格式。 是持久化的储存数据,实现了基本的数据序列和反序列化。能将任意一个Python对象转换成一系统字节的这个操作过程叫做串行化对象。
- 通过pickle模块的序列化操作,可以将对象信息保存到文件中去,是永久存储哦;
- 通过pickle模块的反序列化操作,可以从文件中创建上一次程序保存的对象。
二、Pickle与CPickle对比
-
Pickle是完全用Python来实现的模块
-
CPickle是用C来实现的,它的速度要比pickle快好多倍,一般建议如果电脑中只要有CPickle的话都应该使用它
-
使用Python2的小伙伴引入时可采用如下模版代码:
try: import cPickle as pickle except ImportError: import pickle
-
而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用来读取已序列化的数据
try: import cPickle as pickle except ImportError: import pickle def saveData1(): print('saveData1 be called') save = 'hello world1'; with open('data1.pkl', 'wb') as fp: pickle.dump(save, fp) def saveData2(): print('saveData2 be called') save = 'hello world2'; with open('data2.pkl', 'wb') as fp: data = pickle.dumps(save) fp.write(data) def loadData1(): print('loadData1 be called') with open('data1.pkl', 'rb') as fp: return pickle.load(fp) def loadData2(): print('loadData2 be called') with open('data2.pkl', 'rb') as fp: return pickle.load(fp) if __name__=="__main__": saveData1(); saveData2() print(loadData1()) print(loadData2())
-
运行结果如下
saveData1 be called saveData2 be called loadData1 be called hello world1 loadData2 be called hello world2
-
如上我们便学习了pickle的简单使用
-
后面有需要需要序列化存储数据的需求就可以使用pickle了哦,感谢你的观看。