1. 程式人生 > >Python學習(四)cPickle的用法

Python學習(四)cPickle的用法

  python中有兩個類似的:pickle與cPickle;兩者的關係:“cPickle – A faster pickle”
  pickle模組中的兩個主要函式是dump()和load()。dump()函式接受一個檔案控制代碼和一個數據物件作為引數,把資料物件以特定的格式儲存到給定的檔案中。當我們使用load()函式從檔案中取出已儲存的物件時,pickle知道如何恢復這些物件到它們本來的格式。
  cPickle可以對任意一種型別的python物件進行序列化操作,比如list,dict,甚至是一個類的物件等。而所謂的序列化,我的粗淺的理解就是為了能夠完整的儲存並能夠完全可逆的恢復。在cPickle中,主要有四個函式可以做這一工作,下面使用例子來介紹。
  
一、dump: 將python物件序列化儲存到本地的檔案。

>>> import cPickle
>>> data = range(1000)
>>> cPickle.dump(data,open("test\\data.pkl","wb")) 

  dump函式需要指定兩個引數,第一個是需要序列化的python物件名稱,第二個是本地的檔案,需要注意的是,在這裡需要使用open函式開啟一個檔案,並指定“寫”操作。

二、 load:載入本地檔案,恢復python物件

>>> data = cPickle.load(open("test\\data.pkl","rb"))

  同dump一樣,這裡需要使用open函式開啟本地的一個檔案,並指定“讀”操作

三、 dumps:將python物件序列化儲存到一個字串變數中

>>> data_string = cPickle.dumps(data)

四、 loads:從字串變數中載入python物件

>>> data = cPickle.loads(data_string)

例子:

# -*- coding: utf-8 -*- 
import pickle
# 也可以這樣:
# import cPickle as pickle 
obj = {"a": 1, "b": 2, "c": 3} 
# 將 obj 持久化儲存到檔案 tmp.txt 中
pickle.dump(obj, open("tmp.txt"
, "w")) # do something else ... # 從 tmp.txt 中讀取並恢復 obj 物件 obj2 = pickle.load(open("tmp.txt", "r")) print obj2

例子:神經網路中模型引數的儲存

if best_accuracy<val_accuracy:
    best_accuracy = val_accuracy
    cPickle.dump(model,open("./model.pkl","wb"))