Python对象序列化

迷途小书童的 Note
读完需要
7
分钟速读仅需 3 分钟
大家好,我是迷途小书童!
在 Python 开发中,我们经常需要将对象数据保存到磁盘,或者通过网络传输对象信息。这时就需要序列化,Pickle 库为我们提供了极为方便的对象序列化功能。本文将全面解析 Pickle 的工作机制、典型应用及示例代码,希望可以帮助初学者快速掌握这个实用的内置模块。
1
简介
pickle 模块实现了对一个 Python 对象结构的二进制序列化和反序列化。pickling 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 unpickling 是相反的操作,会将字节流转化回一个对象层次结构。
Python 中几乎所有的数据类型(列表,字典,集合,类等)都可以用 pickle 来序列化。
2
常用方法
pickle 模块提供了以下方法,让序列化和反序列化的过程更加方便
dump 方法
pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)将对象 obj 序列化以后的对象写入已打开的文件对象中。参数 protocol 是序列化模式,默认值为 0,表示以文本的形式序列化。protocol 的值还可以是 1 或 2,表示以二进制的形式序列化。
dumps 方法
pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)将 obj 封存以后的对象作为 bytes 类型直接返回,而不是将其写入到文件对象中。各参数与 dump 中的一样。
load 方法
pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)从已打开文件对象中读取序列化后的对象,重建其中特定对象的层次结构并返回。
pickle 协议版本是自动检测出来的,所以不需要参数来指定协议。封存对象以外的其他字节将被忽略。
loads 方法
pickle.loads(data, /, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)重建并返回 data 的对象层级结构。data 是序列化后的 bytes 对象。
3
示例代码
首先,来看看序列化的过程,分别将字符串、字典和列表进行序列化,使用 dump 方法
(demo) PS C:\Users\Administrator> ipython
Python 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.12.0 -- An enhanced Interactive Python. Type '?' for help.In [1]: aString = 'xugaoxiang.com'In [2]: aDict = {'p': 'python', 'r': 'rust', 's': 'swift'}In [3]: aList = ['one', 'two', 'three']In [5]: f = open('test.pkl', 'wb')In [6]: pickle.dump(aString, f, True)
<IPython.core.display.Javascript object>In [7]: pickle.dump(aDict, f, True)
<IPython.core.display.Javascript object>In [8]: pickle.dump(aList, f, True)
<IPython.core.display.Javascript object>In [9]: f.close()In [10]: 这时候,在目录 C:\Users\Administrator 就生成了二进制文件 test.pkl

接下来开始反序列化
In [11]: f = open('test.pkl', 'wb')In [12]: pickle.dump(aString, f, True)
<IPython.core.display.Javascript object>In [13]: pickle.dump(aDict, f, True)
<IPython.core.display.Javascript object>In [14]: pickle.dump(aList, f, True)
<IPython.core.display.Javascript object>In [15]: f.close()In [16]: f1 = open('test.pkl', 'rb')In [17]: lString = pickle.load(f1)
<IPython.core.display.Javascript object>In [18]: lString
Out[18]: 'xugaoxiang.com'In [19]: lDict = pickle.load(f1)
<IPython.core.display.Javascript object>In [20]: lDict
Out[20]: {'p': 'python', 'r': 'rust', 's': 'swift'}In [21]: lList = pickle.load(f1)
<IPython.core.display.Javascript object>In [22]: lList
Out[22]: ['one', 'two', 'three']In [23]: f1.close() 通过以上代码,可以看到反序列化的过程跟序列化的顺序一样,这一点跟数据结构中的队列很像。
4
文件对象不可以序列化
python 不能序列化文件对象,或者任何带有对文件对象引用的对象,因为在反序列化时无法保证它可以重建该文件的状态。看下面的示例
In [32]: f = open('test.pkl', 'wb')<IPython.core.display.Javascript object>
In [33]: p = pickle.dumps(f)
<IPython.core.display.Javascript object>
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-33-671076828a70> in <module>
----> 1 p = pickle.dumps(f)TypeError: cannot serialize '_io.BufferedWriter' objectIn [34]: 5
可移植性
pickle 文件格式独立于机器的体系结构,这也就意味着,可以在 linux 下创建一个 pickle,然后将它发送到在 Windows 或 MacOS 下运行的 Python 程序。而且,当 python 版本升级时,也不必担心已有的 pickle 操作出现问题,可以向后兼容。
6
免费社群

相关文章:
Python对象序列化
迷途小书童的 Note 读完需要 7分钟 速读仅需 3 分钟 大家好,我是迷途小书童! 在 Python 开发中,我们经常需要将对象数据保存到磁盘,或者通过网络传输对象信息。这时就需要序列化,Pickle 库为我们提供了极为方便的对象序…...
jmeter 准确的吞吐量定时器 Precise Throughput Timer
准确的吞吐量定时器使用实例 提取码:gpex: 说明:配置10个线程,每个线程请求200次,通过准确地的定时器模拟QPS为20的场景 配置测试接口参考链接 配置jmeter测试脚本,主要关注准确的吞吐量定时器参数配置 目…...
后端/DFT/ATPG/PCB/SignOff设计常用工具/操作/流程及一些文件类型
目录 1.PD/DFT常用工具及流程 1.1 FC和ICC2 1.2 LC (Library compiler) 1.3 PrimeTime 1.4 Redhawk与PA 1.5 Calibre和物理验证PV 1.6 芯片设计流程 2.后端、DFT、ATPG的一些常见文件 2.1 LEF和DEF 2.2 ATPG的CTL和STIL 2.3 BSDL 2.4 IPXCT 3.PCB设计的一些工作和工…...
jvm 程序计算器 程序计数器是否溢出 程序计数器是做什么的 java程序计数器会内存溢出吗 程序计数器作用与用处 jvm内存模型 jvm合集(一)
1. jvm内存模型: 内存模型: 程序计数器 堆 栈 本地方法栈 方法区 2. java代码编译为class文件,由类加载器加载到jvm,然后由解释器,jit即时编译到机器码,机器码再到cpu执行 3. 程序计数器: 是一块较小的内存…...
关于近期小程序测试的常见漏洞演示
本章节将为大家介绍一下小程序常见的漏洞的展示案例,包括支付业务逻辑漏洞、任意用户登录漏洞、水平越权漏洞等高危漏洞。 以上小程序测试均获取授权,并且客户均已得到修复(仅供学习,请勿恶意攻击) 关于微信小程序如何拦截数据包ÿ…...
磐基2.0部署apisix集群
一、部署etcd集群 由于etcd是磐基2.0的组件服务,直接通过组件部署即可。如需手动部署,参考如下链接 k8s 部署etcd集群_k8s部署etcd_平凡似水的人生的博客-CSDN博客前言公司计划使用etcd来做统一配置管理,由于服务都在阿里云托管k8s集群上&a…...
Python requests爬虫豆瓣图片返回数据为空。
爬个豆瓣图片,记录个小问题,发现爬取豆瓣原图的时候拿不到数据,返回为空,爬小图可以,爬其他网站的也都正常,最后发现是header中If-Modified-Since这个参数的原因,加上了就拿不到数据,…...
【Spring事务的实现原理】
Spring事务的实现原理就是通过拦截Transactional注解标识的方法,使用事务增强器对这些方法进行事务管理。其中关键的是事务管理器和事务属性源的配置和使用。Spring事务的实现原理可以简单理解为以下几个步骤: 从配置文件中获取PlatformTransactionManag…...
摆动输入连杆夹持机构
1、运动与受力分析 import sympy as sy import numpy as np import matplotlib.pyplot as plt a,a1,b,b1,c,c1,d2,d3,fi,F,L,e sy.symbols(a,a1,b,b1,c,c1,d2,d3,fi,F,L,e)A(-d2,0) D(0,d3) B(-d2a*cos(fi),a*sin(fi)) C(-c*cos(pu),d3c*sin(pu)) B(-d2a*cos(fipi),a*sin(fipi…...
C++——类与对象(下篇)
前言 前面已经介绍了类与对象(上),类与对象(中)的两篇文章,下面是类与对象的最后一些重要知识点的介绍和总结。 目录 再谈构造函数Static成员友元内部类匿名对象拷贝对象时的一些编译器优化再次理解封装…...
stm32 freeRTOS lwip TCP快速发送,内存泄露问题
现象1: 发送缓慢,tcp_write之后要等200多ms才能过发送出去,而且粘包严重。 解决办法 tcp_write之后,立马调用tcp_output ,tcp就会立马发送。 tcp_write tcp_output 现象2: 持续快速发送和接受TCP数据出…...
Ei、Scopus双检索 | 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024)
会议简介 Brief Introduction 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024) 会议时间:2024年4月26日-28日 召开地点:中国宜昌 大会官网:www.faiml.org FAIML 2024将围绕“人工智能与机器学习”的最新研究领域而展开,为…...
win10环境下搭建QT+opencv
安装步骤 源码编译安装免编译/cmake安装vs2022环境安装 问题解决 modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1 PS D:\Qt\Tools\mingw730_64\bin> D:\Qt\Tools\mingw730_64\bin\windres.exe D:\Opencv\opencv\opencv\build\modules\core\vs_ver…...
React16、18 使用 Redux
Redux 核心 Redux 介绍 Redux 是javaScript 状态容器,提供可预测化的状态管理 Redux 工作流程 Actions:对象,描述对状态进行怎样的操作 Reducer:函数,操作状态并返回新的状态 Store:存储状态的容器&am…...
【Python】Python运算符/部分函数对应的双下划线魔法方法
先说下Python版本:【Python 3.7.8】 以下用图片表格展示,一是防扒,二是没精力改成md格式。 还有就是内容肯定没有完全包含(而且也很难做到),像是__reduce__与py自带模块pickle有关(pickle用于对象序列化/反序列化)、sys.getsizeo…...
Macs Fan Control 1.5.16 Pro for mac风扇调节软件
Macs Fan Control是一款专门为 Mac 用户设计的软件,它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度,以提高设备的散热效果,减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温度和…...
某技术公司技术二面面试题总结
存在一个单体架构的服务,怎么拆分为微服务的架构 将一个单体应用程序拆分成微服务架构是一个复杂的过程,需要深入的计划和实施。以下是一般的步骤和策略,可以帮助您成功地将单体应用程序拆分为微服务: 理解单体应用程序ÿ…...
初试小程序轮播组件
文章目录 一、轮播组件(一)swiper组件1、功能描述2、属性说明 (二)swiper-item组件1、功能描述2、属性说明 二、案例演示(一)运行效果(二)实现步骤1、创建小程序项目2、准备图片素材…...
Centos7 Yum安装PHP7.2
1、安装源 安装php72w,是需要配置额外的yum源地址的,否则会报错不能找到相关软件包。 php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic。如果跳过epel-release的话,安装…...
2020年09月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C编程(1~8级)全部真题・点这里 第1题:铺砖 对于一个2行N列的走道。现在用12,22的砖去铺满。问有多少种不同的方式。 时间限制:3000 内存限制:131072 输入 整个测试有多组数据,请做到文件底结束。每行给出…...
Kandinsky-5.0-I2V-Lite-5s代码实例:Python调用API与前端交互实操解析
Kandinsky-5.0-I2V-Lite-5s代码实例:Python调用API与前端交互实操解析 1. 模型简介与核心能力 Kandinsky-5.0-I2V-Lite-5s是一款轻量级图生视频模型,它能够将静态图片转化为动态视频内容。只需提供一张首帧图片和简单的运动描述,模型就能生…...
MIKE URBAN中如何添加污水管水质
管网中的水质一直是管网模型中的一个难题,很多群友也要求小编更新水质方面的内容,一方面,其实水质相关的内容官方资料已经很多了, 觉得没必要重复更新。另一方面,管道水质率定实在太难以率定,很难算的准确。…...
融智学三大基本定律——信息世界的根本法则体系:为跨模态知识处理、人机协同等前沿领域提供原理支撑
融智学三大基本定律——信息世界的根本法则体系摘要:融智学三大基本定律构成信息处理的核心理论体系。第一定律(实部序位关系唯一守恒)确立本质信息的稳定性;第二定律(实部序位同义并列对应转换)实现多元表…...
嵌入式开发必备:三大代码对比工具深度评测
1. 代码对比工具概述作为一名嵌入式开发工程师,我每天都要处理大量的代码修改和版本对比工作。在多年的开发实践中,我发现选择合适的代码对比工具能极大提升工作效率。虽然Beyond Compare是业内公认的标杆产品,但实际工作中我们还有更多选择&…...
经典35kW V型磁钢永磁同步电机设计:基于Maxwell的成熟方案解析
基于Maxwell设计的 经典35kW,外径290 轴向长度88 3000RPM,111.5Nm, 6极36槽永磁同步电机(PMSM)设计案例(V型磁钢),该案例已制作样机,方案成熟,运行稳定,可直接用于生产,…...
【T型三电平仿真】SPWM调制中的单双极性载波特性对比
1. T型三电平逆变器基础认知 第一次接触T型三电平拓扑时,我被它精巧的结构设计惊艳到了。与传统的两电平逆变器相比,这种拓扑在每相桥臂上增加了两个钳位开关管,形成了独特的"T"字形结构。实际搭建电路时,你会发现它的输…...
Gemma-3-12B-IT大模型微调实战:领域适配指南
Gemma-3-12B-IT大模型微调实战:领域适配指南 1. 微调前的准备工作 微调大模型听起来很高深,其实就像教一个聪明人学习新技能。Gemma-3-12B-IT本身已经懂很多东西了,我们要做的就是让它更擅长某个特定领域。开始之前,你需要准备好…...
对 OS:TEP 的 MLFQ 策略的一点思考
1.SJF 调度算法SJF 没啥好说的, 书上讲的很清楚了, SJF 就是最短任务优先原则, 其设计初衷是想解决 FIFO 的糟糕的周转时间的问题.但是, 正如书上所说, 这玩意主打一个秩序井然, 只能处理所有任务同时到队列的情况, 要是某堆进程不按这套路出牌, 那 SJF 立马完蛋, 书上就有一个…...
Seelen-UI终极指南:5分钟打造你的专属Windows桌面环境
Seelen-UI终极指南:5分钟打造你的专属Windows桌面环境 【免费下载链接】Seelen-UI The Fully Customizable Desktop Environment for Windows 10/11. 项目地址: https://gitcode.com/GitHub_Trending/se/Seelen-UI 想要彻底改造Windows 10/11的桌面体验吗&am…...
League-Toolkit:告别繁琐操作,让英雄联盟玩家效率提升300%的智能助手
League-Toolkit:告别繁琐操作,让英雄联盟玩家效率提升300%的智能助手 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 副…...
