Python使用pickle模块实现序列化功能示例


Posted in Python onJuly 13, 2018

本文实例讲述了Python使用pickle模块实现序列化功能。分享给大家供大家参考,具体如下:

Python内置的pickle模块能够将Python对象序列成字节流,也可以把字节流反序列成对象。

import pickle
class Student:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  def say(self):
    print("I am", self.name)
>>> t = Student('Tom', 23)
>>> t.say()
I am Tom
>>>
>>> save_path = './tom_msg'
>>> with open(save_path, 'wb') as f:    # 字节流写入
...   pickle.dump(t, f)      # 序列化数据保存在文件中
>>>
>>> with open(save_path, 'rb') as f:    # 字节流读出
...   after_t = pickle.load(f)    # 读取文件信息反序列化成对象
...
>>> after_t.__dict__
{'name': 'Tom', 'age': 23}
>>> after_t.say()
I am Tom
>>>
>>>
>>> l = Student('Lisa', 23)
>>> serialized = pickle.dumps(l)
>>> serialized
b'\x80\x03c__main__\nStudent\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x04\x00\x00\x00Lisaq\x04X\x03\x00\x00\x00ageq\x05K\x17ub.'
>>> after_l = pickle.loads(serialized)
>>> after_l.say()
I am Lisa
>>> after_l.__dict__
{'name': 'Lisa', 'age': 23

如果比较复杂的操作(对象属性更变,添加删除),pickle模块可能会出问题,那时候应该结合copyreg来使用

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

Python 相关文章推荐
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
Python中__init__.py文件的作用详解
Sep 18 Python
取numpy数组的某几行某几列方法
Apr 03 Python
Numpy中转置transpose、T和swapaxes的实例讲解
Apr 17 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
wxPython实现画图板
Aug 27 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
Python 数据分析之逐块读取文本的实现
Dec 14 Python
Python爬虫实战之爬取携程评论
Jun 02 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 Python
mac下如何将python2.7改为python3
Jul 13 #Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 #Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 #Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 #Python
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 #Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 #Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 #Python
You might like
php反弹shell实现代码
2009/04/22 PHP
php异常处理方法实例汇总
2015/06/24 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
php生出随机字符串
2017/07/06 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
Python 串口读写的实现方法
2019/06/12 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
python中entry用法讲解
2020/12/04 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
中专生毕业个人鉴定
2014/02/26 职场文书
运动会班级口号
2014/06/09 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
规范化管理年活动总结
2014/08/29 职场文书
运动会开幕词
2015/01/28 职场文书
廉洁自律个人总结
2015/02/14 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL