標籤:python dump load pickle cpickle
電腦的記憶體中儲存的是二進位的序列 (當然,在Linux眼中,是文字資料流)。我們可以直接將某個對象所對應位置的資料抓取下來,轉換成文字資料流 (這個過程叫做serialize),然後將文字資料流存入到檔案中。由於Python在建立對象時,要參考對象的類定義,所以當我們從文本中讀取對象時,必須在手邊要有該對象的類定義,才能懂得如何去重建這一對象。從檔案讀取時,對於Python的內建(built-in)對象 (比如說整數、詞典、表等等),由於其類定義已經載入記憶體,所以不需要我們再在程式中定義類。但對於使用者自行定義的對象,就必須要先定義類,然後才能從檔案中載入對象。
在python中,一般可以使用pickle類來進行python對象的序列化,而cPickle提供了一個更快速簡單的介面,如python文檔所說的:“cPickle -- A faster pickle”。
cPickle可以對任意一種類型的python對象進行序列化操作,比如list,dict,甚至是一個類的對象等。而所謂的序列化,我的粗淺的理解就是為了能夠完整的儲存並能夠完全可逆的恢複。在cPickle中,主要有四個函數可以做這一工作,下面使用例子來介紹。
1, dump: 將python對象序列化儲存到本地的檔案。
>>> import cPickle
>>> data = range(1000)
>>> cPickle.dump(data,open("test\\data.pkl","wb"))
dump函數需要指定兩個參數,第一個是需要序列化的python對象名稱,第二個是本地的檔案,需要注意的是,在這裡需要使用open函數開啟一個檔案,並指定“寫”操作。
2. load:載入本地檔案,恢複python對象
>>> data = cPickle.load(open("test\\data.pkl","rb"))
同dump一樣,這裡需要使用open函數開啟本地的一個檔案,並指定“讀”操作
3. dumps:將python對象序列化儲存到一個字串變數中。
>>> data_string = cPickle.dumps(data)
4. loads:從字串變數中載入python對象
>>> data = cPickle.loads(data_string)
【源碼樣本】
import h5pyimport cPickle#data_path = 'F:\\20150727_1010\\FEAT_Name.mat'data_path = 'F:\\wfpdm\\20150727_1010\\FEAT_Name.mat'#data_path = 'H:\\wfpdm\\20150727_1010\\FEAT_Name.mat'root_path = "F:\\wfpdm\\20150727_1010\\"#root_path = "H:\\wfpdm\\20150727_1010\\"myfile=h5py.File(data_path,'r')Data_Set = [myfile[element[0]][:].T for element in myfile['FEAT_Name']]#data = [myfile[element[0]][:].T for element in myfile['FEAT_Name']]#print data[0].shape #print data[1].shapeprint Data_Set[0].shapemyfile.close()filename='Tst.pkl' fid = open(root_path+filename, 'wb')cPickle.dump(Data_Set,fid)fid.close()fim = open(root_path+filename,"rb")loaddata = cPickle.load(fim)fim.close()print loaddata[0].shape
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Python 之 cPickle 實現 檔案存取