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

本文介绍如何使用Python的pickle和cPickle模块实现对象的持久化存储。通过实例演示了对象序列化为文本流的过程,以及如何反序列化文本流重建对象。

作者: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

就不需要再做任何改动了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值