pickle-python數據持久存儲



說白了就是:對象信息保存到文件中去,永久存儲!python

格式:
 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()接口。



#使用pickle模塊將數據對象保存到文件bash

#!/usr/bin/env python
import pickle
data1 = {'one': [14,22,30],
         'two': ('lucy', 'jack','ceci'),
         'three': None}
selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)

#以二進制寫模式打開
output = open('data.pkl', 'wb')
# Pickle dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)
output.close()


dumps(object) 返回一個字符串,它包含一個 pickle 格式的對象

>>> import pickle
>>> t1=('this is a string',41,[1,2,3],None)
>>> p1=pickle.dumps(t1)
>>> p1
"(S'this is a string'\np0\nI41\n(lp1\nI1\naI2\naI3\naNtp2\n."
>>>
loads() 和 load() 函數自動檢測 pickle 是二進制格式仍是文本格式。
>>> t2=pickle.loads(p1)
>>> t2
('this is a string', 41, [1, 2, 3], None)
實例:
>>> a1='apple'
>>> b1={1:'one',2:'two',3:'three'}
>>> c1=['free','fie','foe','fum']
>>> f1=file('temp.pkl','wb')
>>> pickle.dump(a1,f1,True)
>>> pickle.dump(b1,f1,True)
>>> pickle.dump(c1,f1,True)
>>> f1.close()
>>> 
>>> f2.file('temp.pkl','rb')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'f2' is not defined
>>> f2=file('temp.pkl','rb')
>>> a2=pickle.load(f2)
>>> a2
'apple'
>>> b2=pickle.load(f2)
>>> b2
{1: 'one', 2: 'two', 3: 'three'}
>>> c2=pickle.load(f2)
>>> c2
['free', 'fie', 'foe', 'fum']
>>> f2.close()




檢索所支持的格式
>>> pickle.format_version  
'1.3'  
>>> pickle.compatible_formats  
['1.0', '1.1', '1.2']
相關文章
相關標籤/搜索