您的位置:首页 > 编程语言 > Python开发

Python标准库05学习笔记--存储对象 (pickle包,cPickle包)

2018-01-16 20:19 771 查看
作者: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


就不需要再做任何改动了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: