python的pickle模块实现了基本的数据序列和反序列化。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
基本接口:
pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;
1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以’w’方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。
pickle.load(file)
注解:从file中读取一个字符串,并将它重构为原来的python对象。
file:类文件对象,有read()和readline()接口。
举例说明
1 import pickle
2
3 b=7
4 i=13000000
5 fa=99.056
6 s='中国人民 123abc'
7 lst=[[1,2,3],[4,5,6],[7,8,9]]
8 tu=(-5,10,8)
9 coll={4,5,6}
10 dic={'a':'apple','b':'banana','g':'grape','o':'orange'}
11 f=open('sample_pickle.dat','wb') #以写模式打开二进制文件
12 try:
13 pickle.dump(b,f) #对象个数
14 pickle.dump(i,f) #写入整数
15 pickle.dump(fa,f) #写入字符串
16 pickle.dump(s,f) #写入浮点数
17 pickle.dump(lst,f) #写入列表
18 pickle.dump(tu,f) #写入元组
19 pickle.dump(coll,f) #写入集合
20 pickle.dump(dic,f) #写入字典
21 except:
22 print('写文件异常')
23 finally:
24 f.close()
25
26 '''
27 使用pickle模块读取'sample_pickle.dat'内的二进制内容
28 '''
29 f=open('sample_pickle.dat','rb')
30 n=pickle.load(f) #读出文件的数据个数
31 for i in range(n):
32 x=pickle.load(f)
33 print(x)
34 f.close()
35
36 '''输出
37 13000000
38 99.056
39 中国人民 123abc
40 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
41 (-5, 10, 8)
42 {4, 5, 6}
43 {'a': 'apple', 'b': 'banana', 'g': 'grape', 'o': 'orange'}
44 '''