Python 之 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 h5py
import 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].shape
print Data_Set[0].shape
myfile.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,dump,load,pickle,cPickle)