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的While循环语句的使用方法
Oct 13 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
windows下numpy下载与安装图文教程
Apr 02 Python
python 实现矩阵按对角线打印
Nov 29 Python
python文件处理fileinput使用方法详解
Jan 02 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
Python实现聚类K-means算法详解
Jul 15 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中显示数组与对象的实现代码
2011/04/18 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
form自动提交实例讲解
2017/07/10 PHP
Javascript----文件操作
2007/01/18 Javascript
js调用flash的效果代码
2008/04/26 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python入门篇之文件
2014/10/20 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
Python 功能和特点(新手必学)
2015/12/30 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
使用Python实现分别输出每个数组
2019/12/06 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
介绍下java.util.Arrays类
2012/10/16 面试题
网络营销策划方案
2014/06/04 职场文书
教师党员自我评价范文
2015/03/04 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript