作者:Vamei 出处:http://www.cnblogs.com/vamei
存储对象 (pickle包,cPickle包)
pickle包
1)将内存中对象转换为文本流–pickle.dumps()
import pickle
class Bird(object):
have_feather=True
way_of_reproduction='egg'
summer=Bird()
picklestring=pickle.dumps(summer)
print(picklestring)
输出:
b’\x80\x03c__main__\nBird\nq\x00)\x81q\x01.’
使用pickle.dumps()方法可以将对象summer转换成了字符串 picklestring(也就是文本流)。随后我们可以用普通文本的存储方法来将该字符串储存在文件(文本文件的输入输出)。
当然,我们也可以使用pickle.dump()的方法,将上面两部合二为一:
with open('test.txt','wb') as f: #python3.x中要写'wb',写'w'会报错
picklestring=pickle.dump(summer,f)#将summer以文本流的形式写入test.txt
test.txt中信息为:
8003 635f 5f6d 6169 6e5f 5f0a 4269 7264
0a71 0029 8171 012e
2)重建对象
首先,我们要从文本中读出文本,存储到字符串 (文本文件的输入输出)。然后使用pickle.loads(str)的方法,将字符串转换成为对象。要记得,此时我们的程序中必须已经有了该对象的类定义。
with open('test.txt','rb') as f: #python3.x中要写'rb',写'r'会报错
resummer=pickle.load(f)
print(resummer)
print(resummer.have_feather)
输出:
<__main__.Bird object at 0x00000270EFE3AD30>
True
cPickle包
cPickle包的功能和用法与pickle包几乎完全相同 (其存在差别的地方实际上很少用到),不同在于cPickle是基于c语言编写的,速度是pickle包的1000倍。对于上面的例子,如果想使用cPickle包,我们都可以将import语句改为:
import cPickle as pickle
就不需要再做任何改动了。
本文介绍如何使用Python的pickle和cPickle模块实现对象的持久化存储。通过实例演示了对象序列化为文本流的过程,以及如何反序列化文本流重建对象。
869

被折叠的 条评论
为什么被折叠?



