Home > Backend Development > Python Tutorial > Python pickle module usage example analysis

Python pickle module usage example analysis

高洛峰
Release: 2016-12-16 11:55:28
Original
1624 people have browsed it

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

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

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

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

pickle.load(file)

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

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

比如下面的例子

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()
Copy after login

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

>>> 
JGood_2
 
Traceback (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: &#39;module&#39; object has no attribute &#39;Person&#39;
Copy after login

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

clear_memo()

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

看下面的例子:

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()
Copy after login

上面的代码运行如下:

>>>
JGood_2
66
132
>>>
Copy after login

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

>>>
JGood_2
66
70
>>>
Copy after login

   

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

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


更多Python pickle模块用法实例分析相关文章请关注PHP中文网!


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template