Python学习之路(11)——序列化pickle
pickle模块实现了一个基本但功能强大的Python对象序列化和反序列化算法。
通过pickle模块的序列化操作,可以将几乎所有的Python对象转换为二进制字节流的形式保存到文件中,永久存储,该过程称之为pickling;而通过pickle的反序列化操作,可以从文件中将二进制的形式转换成对象,创建上一次程序保存的对象,该过程称之为unpickling。
基本接口:
pickle.dump(obj, file[, protocol]) —— 将对象obj以protocol为序列化协议方式保存到文件file中去。
protocol:序列化使用的协议版本。0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较之前的更高级。其中协议0和1兼容老版本Python。默认值为0。(如果该值为负值或HIGHEST_PROTOCOL,则使用最高的协议版本)
file:对象保存到的类文件对象。file必须有write()接口,file可以使一个以'w'方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要时二进制模式打开的。
pickle.load(file) —— 从file中读取一个字符串,并将它重构为原来的Python对象。
file:类文件对象,有read()和readline()接口。
pickle.dumps(obj[, protocol]) —— 将对象obj以protocol为序列化协议方式序列化为string形式,而不是保存在文件中。
pickle.loads(string) —— 从string中读出序列化前的obj对象。
示例:
pickle.dunp
#使用pickle模块将数据对象保存到文件
import pickle
dict1 = {'a': 'one', 'b': 'two', 'c': 345}
list1 = [1, 2, 3]
output = open('data.txt', 'wb')
# 序列化字典,使用默认协议(protocol = 1)
pickle.dump(dict1, output)
# 序列化列表,使用更高级的协议(protocol >= 1)
pickle.dump(list1, output, 5)
output.close()
pickle.load
#使用pickle模块从文件中重构python对象
import pprint, pickle
filename = open('data.txt', 'rb')
data1 = pickle.load(filename)
pprint.pprint(data1)
data2 = pickle.load(filename)
pprint.pprint(data2)
filename.close()
pickle模块,在实际使用中,将数据量较大的对象(比如:字典)打包成二进制文件,可以避免在源码中直接写入大量数据,不仅不美观,而且影响代码的阅读。
补充知识:
1、什么是持久性?
持久性的基本思想很简单。假设需要一个日常办公程序,希望在多次执行这个程序之间可以保存应用程序对象,也就是说希望将对象存储在磁盘上,而不是内存里,这就是持久性。
2、cPickle模块
cPickle模块也支持pickle,它是用C编码的,具有更好的性能,对于大多数应用程序,推荐使用该模块。
浙公网安备 33010602011771号