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

作者:诸子流 时间:2022-11-17 10:46:22 

一、说明

早上看到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

来源:https://www.cnblogs.com/lsdb/p/12561055.html

标签:python,pickle,序列化,反序列化
0
投稿

猜你喜欢

  • sqlserver数据库导入数据操作详解(图)

    2024-01-15 09:00:11
  • python3中dict.keys().sort()用不了的解决方法

    2023-08-16 11:33:54
  • ORACLE LATERAL-SQL-INJECTION 个人见解

    2009-03-04 10:34:00
  • Selenium多窗口切换解决方案

    2021-07-06 14:56:33
  • python3中确保枚举值代码分析

    2023-05-23 17:47:31
  • python urllib.request模块的使用详解

    2023-03-27 18:19:15
  • 分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了

    2022-05-04 15:35:38
  • SQL Server分析服务性能优化浅析

    2010-01-16 13:30:00
  • Python爬取网页中的图片(搜狗图片)详解

    2023-06-24 00:34:45
  • python使用协程实现并发操作的方法详解

    2021-09-24 11:23:10
  • python如何每天在指定时间段运行程序及关闭程序

    2021-08-05 05:42:05
  • python实现数独算法实例

    2022-11-12 05:31:12
  • Pycharm2022最新版无法换源解决方法

    2023-02-09 20:51:55
  • Python实现数值积分方式

    2022-01-23 14:00:37
  • 用DW8制作网页中常用的过度效果

    2007-10-16 12:56:00
  • 一文秒懂python中的 \\r 与 end=‘’ 巧妙用法

    2022-10-06 08:33:28
  • 美化段落文本 1

    2008-05-15 12:24:00
  • Python多路复用selector模块的基本使用

    2021-12-17 08:43:25
  • Python标准库之循环器(itertools)介绍

    2023-09-16 02:41:43
  • 深入理解 ES6中的 Reflect用法

    2024-04-16 09:30:44
  • asp之家 网络编程 m.aspxhome.com