Python使用pickle进行序列化和反序列化的示例代码


Posted in Python onSeptember 22, 2020

一、说明

早上看到Python使用pickle进行序列化和反序列化,然后发现面临的一个获取不到返回值的框架,似乎可以通过在框架中先序列化,然后在外部进行反序列化的方法来实现。就研究了一下pickle库的具体使用。

本身也没什么复杂,一方面还是怕忘记,另一方面是自从学Java听到反序化这个词开始就有一种莫明其妙的恐具感总觉得是什么高大上的东西。Java反序列化可参见“Java反序列化漏洞实现”。

二、代码实现

import pickle


class BeSerializing:
 def __init__(self):
  self.var = "a test string."

 def print_var(self):
  print(f"self var value is:{self.var}")


class Serializing:
 def do_serializing(self):
  obj = BeSerializing()
  # with的好处是会最后自动释放获取的资源,对于文件就是最后会自己close()
  with open("test_pickle.obj", "wb") as file_handler:
   # 序列化,将对象写到文件
   pickle.dump(obj, file_handler)


class DeSerializing:
 def do_serializing(self):
  with open("test_pickle.obj", "rb") as file_handler:
   # 反序列化,将对象从文件中还原
   # 注意,虽然python的变量不需要使用前先定义类型,但使用时是要被格式化成确定类型的
   # 所以,如果反序列化类和被序列化类不在同一文件中,那么需要将被序列化类import进来,不然会因找不到被反序列化类而反序列化失败
   obj = pickle.load(file_handler)
   print(f"obj type: {type(obj)}\n"
     f"obj.var value: {obj.var}")


if __name__ == "__main__":
 obj_se = Serializing()
 obj_se.do_serializing()
 obj_de = DeSerializing()
 obj_de.do_serializing()

运行结果如下,可以看到成功反序列化并打印出被序列化的对象的变量的值:

Python使用pickle进行序列化和反序列化的示例代码

参考:

https://docs.python.org/3/library/pickle.html

以上就是Python使用pickle进行序列化和反序列化的示例代码的详细内容,更多关于python 序列化和反序列化的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python获得文件创建时间和修改时间的方法
Jun 30 Python
python文件特定行插入和替换实例详解
Jul 12 Python
django ajax json的实例代码
May 29 Python
Python 变量类型详解
Oct 10 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
Python logging设置和logger解析
Aug 28 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
Python pickle模块实现对象序列化
Nov 22 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
Python如何获取文件路径/目录
Sep 22 #Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 #Python
python 实现压缩和解压缩的示例
Sep 22 #Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 #Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 #Python
python 线程的五个状态
Sep 22 #Python
python 如何实现遗传算法
Sep 22 #Python
You might like
php explode函数实例代码
2012/02/27 PHP
PHP应用JSON技巧讲解
2013/02/03 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
深入解析Python中的变量和赋值运算符
2015/10/12 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python常见的pandas用法demo示例
2019/03/16 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
电大学习个人自我评价范文
2013/10/04 职场文书
《童年》教学反思
2014/02/18 职场文书
班级体育活动总结
2014/07/05 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
自主招生学校推荐信
2014/09/26 职场文书
2014年少先队工作总结
2014/12/03 职场文书
2014会计年终工作总结
2014/12/20 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
Win11 BitLocker 驱动器加密
2022/04/19 数码科技