欢迎来到山村网

Python pickle模块用法实例分析

2019-03-02 13:23:44浏览:450 来源:山村网   
核心摘要:  本文实例讲述了Python pickle模块用法。分享给大家供大家参考。具体分析如下:  pickle提供了一个简单的持久化功能。可以

  本文实例讲述了Python pickle模块用法。分享给大家供大家参考。具体分析如下:

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

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

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

  pickle.load(file)

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

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

  比如下面的例子

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import pickle class 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 Person f=open('d:p.txt','r') bb=pickle.load(f) f.close() bb.show()

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

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >>> JGood_2 Traceback (most recent call last): File "C:/py/test.py", line 15, in <module> bb=pickle.load(f) File "C:Python27libpickle.py", line 1378, in load return Unpickler(file).load() File "C:Python27libpickle.py", line 858, in load dispatch[key](self) File "C:Python27libpickle.py", line 1069, in load_inst klass = self.find_class(module, name) File "C:Python27libpickle.py", line 1126, in find_class klass = getattr(mod, name) AttributeError: 'module' object has no attribute 'Person'

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

  clear_memo()

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

  看下面的例子:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import StringIO import pickle class 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()

  上面的代码运行如下:

  ?

1 2 3 4 5 >>> JGood_2 66 132 >>>

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

  ?

1 2 3 4 5 >>> JGood_2 66 70 >>>

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

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

(责任编辑:豆豆)
下一篇:

python中zip和unzip数据的方法

上一篇:

Python创建模块及模块导入的方法

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com