html5中文学习网

您的位置: 首页 > 网站及特效实例 > jquery特效 » 正文

Python pickle模块用法实例分析_编程语言综合

[ ] 已经帮助:人解决问题

   本文实例讲述了Python pickle模块用法。分享给大家供大家参考。具体分析如下:gjzHTML5中文学习网 - HTML5先行者学习网

  pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。gjzHTML5中文学习网 - HTML5先行者学习网

  pickle.dump(obj, file[, protocol])gjzHTML5中文学习网 - HTML5先行者学习网

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

  pickle.load(file)gjzHTML5中文学习网 - HTML5先行者学习网

  反序列化对象。将文件中的数据解析为一个Python对象。gjzHTML5中文学习网 - HTML5先行者学习网

  其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错:gjzHTML5中文学习网 - HTML5先行者学习网

  比如下面的例子gjzHTML5中文学习网 - HTML5先行者学习网

  ?gjzHTML5中文学习网 - HTML5先行者学习网

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的话,那么会报错如下:gjzHTML5中文学习网 - HTML5先行者学习网

  ?gjzHTML5中文学习网 - HTML5先行者学习网

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'

  意思就是当前模块找不到类的定义了。gjzHTML5中文学习网 - HTML5先行者学习网

  clear_memo()gjzHTML5中文学习网 - HTML5先行者学习网

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

  看下面的例子:gjzHTML5中文学习网 - HTML5先行者学习网

  ?gjzHTML5中文学习网 - HTML5先行者学习网

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()

  上面的代码运行如下:gjzHTML5中文学习网 - HTML5先行者学习网

  ?gjzHTML5中文学习网 - HTML5先行者学习网

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

  此时再注释掉pick.clear_memo()后,运行结果如下:gjzHTML5中文学习网 - HTML5先行者学习网

  ?gjzHTML5中文学习网 - HTML5先行者学习网

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

  主要是因为,python的pickle如果不clear_memo,则不会多次去序列化对象。gjzHTML5中文学习网 - HTML5先行者学习网

  希望本文所述对大家的Python程序设计有所帮助。gjzHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助