首页 技术 正文
技术 2022年11月10日
0 收藏 943 点赞 3,889 浏览 1269 个字

@Python pickle模块学习

 

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

——————————————

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

——————————————
pickle.load(file)
  反序列化对象。将文件中的数据解析为一个Python对象。

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

比如下面的例子

  1. import pickle
  2. class Person:
  3. def __init__(self,n,a):
  4. self.name=n
  5. self.age=a
  6. def show(self):
  7. print self.name+”_”+str(self.age)
  8. aa = Person(“JGood”, 2)
  9. aa.show()
  10. f=open(‘d:\\p.txt’,’w’)
  11. pickle.dump(aa,f,0)
  12. f.close()
  13. #del Person
  14. f=open(‘d:\\p.txt’,’r’)
  15. bb=pickle.load(f)
  16. f.close()
  17. bb.show()

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

Python ,pickle

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

————————————————–

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

  1. import StringIO
  2. import pickle
  3. class Person:
  4. def __init__(self,n,a):
  5. self.name=n
  6. self.age=a
  7. def show(self):
  8. print self.name+”_”+str(self.age)
  9. aa = Person(“JGood”, 2)
  10. aa.show()
  11. fle = StringIO.StringIO()
  12. pick = pickle.Pickler(fle)
  13. pick.dump(aa)
  14. val1=fle.getvalue()
  15. print len(val1)
  16. pick.clear_memo()
  17. pick.dump(aa)
  18. val2=fle.getvalue()
  19. print len(val2)
  20. fle.close()

上面的代码运行如下:

Python ,pickle

如果不注释掉,则运行结果是第一个。如果注释掉,那么运行结果是第二个。

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,405
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898