香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

Python pickle模块用法实例分析


时间:2021-12-08 14:50 作者:admin


本文实例讲述了python/' target='_blank'>python pickle模块用法。分享给大家供大家参考。具体分析如下:

pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。

pickle.dump(obj, file[, protocol])

序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。

pickle.load(file)

反序列化对象。将文件中的数据解析为一个Python对象。

其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错:

比如下面的例子

import pickleclass Person:  def __init__(self,n,a):    self.name=n    self.age=a  def show(self):    print self.name+"_"+str(self.age)aa = Person("JGood", 2)aa.show()f=open('d:\\p.txt','w')pickle.dump(aa,f,0)f.close()#del Personf=open('d:\\p.txt','r')bb=pickle.load(f)f.close()bb.show()

如果不注释掉del Person的话,那么会报错如下:

>>> JGood_2Traceback (most recent call last): File "C:/py/test.py", line 15, in <module>  bb=pickle.load(f) File "C:\Python27\lib\pickle.py", line 1378, in load  return Unpickler(file).load() File "C:\Python27\lib\pickle.py", line 858, in load  dispatch[key](self) File "C:\Python27\lib\pickle.py", line 1069, in load_inst  klass = self.find_class(module, name) File "C:\Python27\lib\pickle.py", line 1126, in find_class  klass = getattr(mod, name)AttributeError: 'module' object has no attribute 'Person'

意思就是当前模块找不到类的定义了。

clear_memo()

清空pickler的“备忘”。使用Pickler实例在序列化对象的时候,它会“记住”已经被序列化的对象引用,所以对同一对象多次调用dump(obj),pickler不会“傻傻”的去多次序列化。

看下面的例子:

import StringIOimport pickleclass Person:  def __init__(self,n,a):    self.name=n    self.age=a  def show(self):    print self.name+"_"+str(self.age)aa = Person("JGood", 2)aa.show()fle = StringIO.StringIO()pick = pickle.Pickler(fle)pick.dump(aa)val1=fle.getvalue()print len(val1)pick.clear_memo()pick.dump(aa)val2=fle.getvalue()print len(val2)fle.close()

上面的代码运行如下:

>>> JGood_266132>>> 

此时再注释掉pick.clear_memo()后,运行结果如下:

>>> JGood_26670>>> 

主要是因为,python的pickle如果不clear_memo,则不会多次去序列化对象。

希望本文所述对大家的Python程序设计有所帮助。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)