计算机的内存中存储的是二进制的序列 (当然,在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
版权声明:本文为博主原创文章,未经博主允许不得转载。