【python】使用pickle模組將資料永久儲存,pickle.dump()序列化、pickle.load()反序列化例項詳解

brucewong0516發表於2018-01-13

Python提供兩個模組來實現序列化:cPickle和pickle。這兩個模組功能是一樣的,區別在於cPickle是C語言寫的,速度快,pickle是純Python寫的,速度慢,跟cStringIO和StringIO一個道理。用的時候,先嚐試匯入cPickle,如果失敗,再匯入pickle:

In [1]: try:
   ...:     import cPickle
   ...: except ImportError:
   ...:     import pickle

python的pickle模組實現了基本的資料序列和反序列化。通過pickle模組的序列化操作我們能夠將程式中執行的物件資訊儲存到檔案中去,永久儲存;通過pickle模組的反序列化操作,我們能夠從檔案中建立上一次程式儲存的物件

1、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,檔案物件需要是二進位制模式開啟的。
#
In [1]: import pickle
#寫入一個檔案,用寫入二進位制的格式
In [2]: f = open('data_one.pkl','wb')
#待寫入資料
In [3]: datas = {'name':'Bruce','age':25,'high':175}
#dump函式將obj資料datas匯入到file檔案f中
In [4]: data_one = pickle.dump(datas,f,-1)
#完整的f檔案操作控制程式碼
In [5]: f.close()

2、pickle.load(file):從file中讀取一個字串,並將它重構為原來的python物件,是反序列化出物件過程;

  • file:類檔案物件,有read()和readline()介面。
#開啟一個data_one檔案
In [8]: f = open('data_one.pkl','rb')
#可以看出開啟後是一個pkl檔案
In [12]: open('data_one.pkl','rb')
Out[12]: <_io.BufferedReader name='data_one.pkl'>
#使用load的方法將資料從pkl檔案中讀取出來
In [9]: pickle.load(f)
Out[9]: {'age': 25, 'high': 175, 'name': 'Bruce'}
In [10]: f.close()

#開啟檔案使用pickle.load後,生成的檔案後續可以一直呼叫
In [13]: f = open('data_one.pkl','rb')
In [14]: c = pickle.load(f)
In [15]: f.close()
#呼叫已經匯出來的檔案
In [16]: c
Out[16]: {'age': 25, 'high': 175, 'name': 'Bruce'}

相關文章