Python pickle模块用法实例分析


Posted in Python onMay 27, 2015

本文实例讲述了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()

如果不注释掉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: 'module' object has no attribute 'Person'

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

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

上面的代码运行如下:

>>> 
JGood_2
66
132
>>>

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

>>> 
JGood_2
66
70
>>>

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

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

Python 相关文章推荐
Python 正则表达式实现计算器功能
Apr 29 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
如何实现Django Rest framework版本控制
Jul 25 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
openCV提取图像中的矩形区域
Jul 21 Python
Django项目创建及管理实现流程详解
Oct 13 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
总结Pyinstaller打包的高级用法
Jun 28 Python
Python创建模块及模块导入的方法
May 27 #Python
Python类的用法实例浅析
May 27 #Python
Python socket编程实例详解
May 27 #Python
Python简单删除目录下文件以及文件夹的方法
May 27 #Python
python解析xml文件实例分析
May 27 #Python
Python定时执行之Timer用法示例
May 27 #Python
python定时执行指定函数的方法
May 27 #Python
You might like
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
Python 转换文本编码实现解析
2019/08/27 Python
Series和DataFrame使用简单入门
2019/11/13 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
求职简历自荐信范文
2013/10/21 职场文书
房屋出售授权委托书
2014/10/12 职场文书
中学生检讨书范文
2014/11/03 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL