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 '''
