python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
Pickle模块提供了四个功能:dumps、dump、loads、load
他们之间的区别:
dump(object, file) #直接将数据写入文件中 #dump(数据,文件)
dumps(object) -> string #将数据转换为字符串 #dumps(数据),转换为字符串
load(file) -> object #将文件内容读取并返回为原类型 #load(文件),转换为文件原来的类型
loads(string) -> object #将文件字符串读取并返回为原类型 #loads(文件内容),转换为原来的类型
dumps,loads 还需要使用write,read 读写数据
dump,load 直接帮你 write,read
1.将内存中的对象转换成为文本流:
import pickle class Bird(object): have_feather = True # way_of_reproduction = 'egg' def __init__(self): self.way_of_reproduction = 'egg' def __unicode__(self): return self.way_of_reproduction summer = Bird() fn = 'a.pkl' with open(fn, 'w') as f: picklestring = pickle.dump(summer, f)
使用pickle.dumps()方法可以将对象summer转换成了字符串 picklestring(也就是文本流)
2.将文本文件转换为对象
import pickle
class Bird(object): have_feather = True way_of_reproduction = 'egg' fn = 'a.pkl' with open(fn, 'r') as f: summer = pickle.load(f) print summer.way_of_reproduction
cPickle包
cPickle包的功能和用法与pickle包几乎完全相同 (其存在差别的地方实际上很少用到),不同在于cPickle是基于c语言编写的,速度是pickle包的1000倍。对于上面的例子,如果想使用cPickle包,我们都可以将import语句改为:
import cPickle as pickle
其他不需要改