Pickle 详解

2023-11-06

那么为什么需要序列化和反序列化这一操作呢?

  1.便于存储。序列化过程将文本信息转变为二进制数据流。这样就信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据。在Python程序运行中得到了一些字符串、列表、字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。python模块大全中的Pickle模块就派上用场了,它可以将对象转换为一种可以传输或存储的格式。

  2.便于传输。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把這个对象转换为字节序列,在能在网络上传输;接收方则需要把字节序列在恢复为对象。

通过简单示例来理解什么是机器学习

pickle是python语言的一个标准模块,安装python后已包含pickle库,不需要单独再安装。

pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

在官方的介绍中,序列化操作的英文描述有好几个单词,如”serializing”, “pickling”, “serialization”, “marshalling” 或者”flattening”等,它们都代表的是序列化的意思。相应的,反序列化操作的英文单词也有好多个,如”de-serializing”, “unpickling”, “deserailization”等。为了避免混淆,一般用”pickling”/“unpickling”, 或者”serialization”/“deserailization”。

pickle模块是以二进制的形式序列化后保存到文件中(保存文件的后缀为”.pkl”),不能直接打开进行预览。而python的另一个序列化标准模块json,则是human-readable的,可以直接打开查看(例如在notepad++中查看)。

pickle模块有两类主要的接口,即序列化和反序列化。

其中序列化操作包括:

1

2

pickle.dump()

Pickler(file, protocol).dump(obj)

反序列化操作包括:

1

2

pickle.load()

Unpickler(file).load()

2 序列化操作

2.1 序列化方法pickle.dump()

序列化的方法为 pickle.dump(),该方法的相关参数如下:

1

pickle.dump(obj, file, protocol=None,*,fix_imports=True)

该方法实现的是将序列化后的对象obj以二进制形式写入文件file中,进行保存。它的功能等同于 Pickler(file, protocol).dump(obj)。

关于参数file,有一点需要注意,必须是以二进制的形式进行操作(写入)。

参考前文的案例如下:

1

2

import picklewith open('svm_model_iris.pkl', 'wb') as f:

 pickle.dump(svm_classifier, f)

file为'svm_model_iris.pkl',并且以二进制的形式('wb')写入。

关于参数protocol,一共有5中不同的类型,即(0,1,2,3,4)。(0,1,2)对应的是python早期的版本,(3,4)则是在python3之后的版本。

此外,参数可选 pickle.HIGHEST_PROTOCOL和pickle.DEFAULT_PROTOCOL。当前,python3.5版本中,pickle.HIGHEST_PROTOCOL的值为4,pickle.DEFAULT_PROTOCOL的值为3。当protocol参数为负数时,表示选择的参数是pickle.HIGHEST_PROTOCOL。

2.2 序列化方法pickle.dumps()

pickle.dumps()方法的参数如下:

1

pickle.dumps(obj, protocol=None,*,fix_imports=True)

pickle.dumps()方法跟pickle.dump()方法的区别在于,pickle.dumps()方法不需要写入文件中,它是直接返回一个序列化的bytes对象。

2.3 序列化方法Pickler(file, protocol).dump(obj)

pickle模块提供了序列化的面向对象的类方法,即 class pickle.Pickler(file, protocol=None,*,fix_imports=True),Pickler类有dump()方法。

Pickler(file, protocol).dump(obj) 实现的功能跟 pickle.dump() 是一样的。

关于Pickler类的其他method,请参考官方API。

插播一条硬广:技术文章转发太多,本文来自微信公众号:“Python数据之道”(ID:PyDataRoad)。

3 反序列化操作

3.1 反序列化方法pickle.load()

序列化的方法为 pickle.load(),该方法的相关参数如下:

1

pickle.load(file, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)

该方法实现的是将序列化的对象从文件file中读取出来。它的功能等同于 Unpickler(file).load()。

关于参数file,有一点需要注意,必须是以二进制的形式进行操作(读取)。

参考前文的案例如下:

1

2

import picklewith open('svm_model_iris.pkl', 'rb') as f:

 model = pickle.load(f)

file为'svm_model_iris.pkl',并且以二进制的形式('rb')读取。

读取的时候,参数protocol是自动选择的,load()方法中没有这个参数。

3.2 反序列化方法pickle.loads()

pickle.loads()方法的参数如下:

1

pickle.loads(bytes_object, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)

pickle.loads()方法跟pickle.load()方法的区别在于,pickle.loads()方法是直接从bytes对象中读取序列化的信息,而非从文件中读取。

3.3 反序列化方法Unpickler(file).load()

pickle模块提供了反序列化的面向对象的类方法,即 class pickle.Unpickler(file, *,fix_imports=True, encoding="ASCII". errors="strict"),Pickler类有load()方法。

Unpickler(file).load() 实现的功能跟 pickle.load() 是一样的。

关于Unpickler类的其他method,请参考官方API。

pickle模块还是比较实用的,当然,关于pickle模块,其实还有许多的信息可以去了解,想了解更多信息的童鞋,建议可以阅读下python官方的API文档(library文件)。

以上所述是小编给大家介绍的Python 中Pickle库的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pickle 详解 的相关文章

  • CSS-IN-JS

    集成css代码在js中 一 为什么会有 CSS IN JS CSS IN JS 是 WEB 项 中将 CSS 代码捆绑在 JavaScript 代码中的解决 案 这种 案旨在解决 CSS 的局限性 例如缺乏动态功能 作 域和可移植性 二 C
  • MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

    MS17 010 Eternal blue永恒之蓝 漏洞利用 修复方法 前言 0x01 准备工作 0x02 漏洞利用 0x03 修复方案 总结 前言 提到操作系统漏洞 大家肯定听说过耳熟能详的永恒之蓝 MS17 010 了 他的爆发源于Wa
  • (模电笔记四 By Multisim)典型运算放大电路案例分析(同相反相差分)

    1 反相比例运算电路 1 输入 U i U i Ui 与输出 U
  • 【研究记录】dummy related tips

    Q 生成dummy但是条件太多 string太长 A 参考 合成控制法时候expression too long错误解决问题 Stata专版 经管之家 原人大经济论坛 pinggu org local code1 C25 C26 C27 C
  • 鸿蒙-实践课程五 android、HarmonyOS Database

    在android中使用到数据包括 sqlite mysql等等 使用最多是 greenDao 是 Android中一个开源的对象关系映射框架 能够提供一个接口通过操作对象的方式去操作关系型数据库 完成 Java 对象的存储 更新 删除和查询
  • 向量数据库介绍

    1 什么是向量数据 向量数据库是一种专门用于存储和检索向量数据的数据库 它不同于传统的关系型数据库 而是基于向量相似度匹配的方式来实现高效的数据查询和分析 2 向量数据库的应用场景 2 1 应用场景概览 向量数据库是一种专门用于存储和检索向
  • ChatGPT 最全中文指南

    ChatGPT 中文指南 ChatGPT模型是由OpenAI训练的大型语言模型 能够生成类人文本 通过向它提供提示 它可以生成继续对话或扩展给定提示的响应 在此中 您将找到可与 ChatGPT 一起使用的各种提示 它能干什么 直接问它 我是
  • PTA 列车调度 (25 分)

    7 11 列车调度 25 分 火车站的列车调度铁轨的结构如下图所示 两端分别是一条入口 Entrance 轨道和一条出口 Exit 轨道 它们之间有N条平行的轨道 每趟列车从入口可以选择任意一条轨道进入 最后从出口离开 在图中有9趟列车 在
  • origin如何绘制双y轴曲线_「科研干货」如何利用Origin高效绘图丨附下载

    初识Origin Origin是一款数据分析和制图的软件 具备统计 峰值分析和曲线拟合等分析功能 可以绘制出二维和三维图形 支持Excel数据导入 甚至txt 直接把txt数据文件拖入到Origin里面 但是Origin对中文的兼容性不是特
  • 3D Tiles格式介绍(1)——概要

    3DTiles格式介绍总目录 https blog csdn net qq 31709249 article details 102643371 前一段时间写了glTF的格式解析 传送门 https blog csdn net qq 317
  • Ubuntu安装Android Studio和SVN配置

    Ubuntu安装Android Studio和SVN配置 Java jdk的配置 在 home hongzhen 目录下新增Java目录 下载Java的Linux包 放到 home hongzhen Java目录下 执行tar zxvf j
  • unity有限状态机和模糊状态机(怪物AI、自动寻路)

    自动寻路步骤 1 把场景中不同的物体勾选static 2 烘培寻路网格 3 添加NavMeshAgent组件 4 给需要寻路的物体添加脚本 游戏中有限状态机的体现 小怪的巡逻和追逐功能 模糊状态机的体现 当玩家离小怪比较近时 小怪会追逐玩家
  • 线程方法wait/wait(timeout)源码分析

    1 wait wait timeout wait有三个重载的方法 但是最终都是调用native的wait timeout 方法 那我们来看看这个方法在jvm中具体做了些什么 图1 1 图1 2 java中的object wait方法对应c
  • 基础算法题——最短路计数(bfs遍历)

    最短路计数 题目描述 给出一个N个顶点M条边的无向无权图 顶点编号为 1 N 问从顶点1开始 到其他每个点的最短路有几条 输入格式 第一行包含2个正整数 N M 为图的顶点数与边数 接下来M行 每行2个正整数 x y 表示有一条顶点x连向顶
  • Graft货币(GRFT)结点搭建

    Graft官网 https www graft network github地址 https github com graft project GraftNetwork releases 节点搭建 从https github com gra
  • MPC车辆轨迹跟踪----理论推导

    MPC控制简介 众所周知 控制算法中 PID的应用占据了90 而另外10 就是这次的主角MPC控制算法 MPC控制算法全称模型预测控制 它相对比PID有着多输入 多输出以及更加平稳的特点 并且最重要的是 MPC可以针对非线性的系统进行控制
  • PCB正片和负片有什么区别

    PCB正片和负片有什么区别 概念 正片和负片是底片的两种不同类型 正片 简单地说就是 在底片上看到什么就有什么 负片 正好相反 看到的就是没有的 看不到的就是有的 见下图 在 Allegro中使用正负片的特点 正片 优点是所见所的 有比较完

随机推荐

  • IDEA 2018 Mybatis Plugin插件安装破解及使用

    一 进入官网http plugins jetbrains com 二 搜索Free MyBatis Plugin 三 点击get 选择Free Mybatis plugin 点击下载 四 下载完成 五 打开Idea 点击File 点击Set
  • ARM汇编基础详解(PS学习汇编的原因)

    目录 前言 1 GNU 汇编语法 2 Cortex A7 常用汇编指令 2 1 处理器内部数据传输指令 内部寄存器数据非内存数据 2 2 存储器访问指令 RAM 2 3 压栈和出栈指令 了解 2 4 跳转指令 2 5 算术运算指令 2 6
  • brew 安装 for Mac

    安装命令 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install master install brew 官网 http brew sh 安装过程遇
  • 电子学会2022年09月青少年软件编程C语言等级考试试卷二级真题及(参考答案)

    编程题 共5题 共100分 1 统计误差范围内的数 考试题目 统计一个整数序列中与指定数字m误差范围小于等于X的数的个数 时间限制 5000 内存限制 65536 输入 输入包含三行 第一行为N 表示整数序列的长度 N lt 100 第二行
  • 代码静态扫描工具sonar介绍

    一 SonarQube整体介绍 SonarQube为静态代码检查工具 采用B S架构 帮助检查代码缺陷 改善代码质量 提高开发速度 通过插件形式 可以支持Java C C JavaScripe等等二十几种编程语言的代码质量管理与检测 通过客
  • 右值引用详解

    何谓右值 右值引用 右值引用与其他对比 右值引用与移动语义 右值引用与std move 移动语义与std move 移动语义注意事项 移动语义与swap 完美转发 何谓右值 一个最简单判断左值 右值的方式是 等号左边的值即左值 等号右边的值
  • 深度学习之浅见

    通常来说 大家认为深度学习的观点是Geoffrey Hinton在2006年提出的 这一算法提出之后 得到了迅速的发展 关于深度学习 zouxy09的专栏中有详细的介绍 Free Mind 的博文也很值得一读 本博文是我对深度学习的一点看法
  • VS Code Remote Development

    在Windows下编辑Linux代码 并且有Linux下的系统接口 第三方dep库的语法解析 代码提示 自动补全 跳转 用起来真香 困扰了Linux后台开发人员多年的难题终极解决方案 要求VS Code版本在1 35 1以上 1 安装远程开
  • 基础学习JavaScript 之 Array

    笔记文 Array JavaScript内置对象之一 由索引值来排序的数据集合 下面就列出了array上的方法 会改变自身的方法 copyWithin 在数组内部 将一段元素序列拷贝到另一段元素序列上 覆盖原有的值 fill 将数组中指定区
  • dc-9 靶机渗透学习

    信息收集 用nmap扫描当前网段 nmap sP 192 168 202 0 24 对靶机进行端口扫描 nmap A p v 192 168 202 148 访问靶机的80端口 进行框架识别 无框架的页面 尝试web服务漏洞 用dirsea
  • java数据结构-栈

    栈 1 栈的定义 栈 Stack 是只允许在一端进行插入或删除的线性表 首先栈是一种线性表 但限定这种线性表只能在某一端进行插入和删除操作 栈顶 Top 线性表允许进行插入删除的那一端 栈底 Bottom 固定的 不允许进行插入和删除的另一
  • VMware+CentOS7搭建私有云桌面服务

    VMware CentOS7搭建私有云桌面服务 1 安装VMware虚拟机工作台 官网下载安装包 版本 14 1 3 Pro 地址 https my vmware com en web vmware info slug desktop en
  • 详解从0开始的嵌入式学习路线,学什么、怎么学?

    嵌入式是个大筐 什么都可以往里面装 电子 机械 计算机 自动化 测控 通信 物联网 很多很多专业都和嵌入式沾边 硬件 驱动 操作系统 网络 应用 算法 很多同学越学越迷糊 越学越感觉什么也不会 首先要记住一句话 嵌入式学习奥义 先观其广 再
  • osgEarth的Rex引擎原理分析(五十八)osgEarth::ShaderFactory osgEarth::ShaderLoader关系

    目标 五十四 中的问题130 osgEarth ShaderFactory osgEarth ShaderLoader关系 ShaderFactory主要用来产生各个着色器阶段的main函数 一般用户不需要直接使用它 除非有特殊的定制需要
  • [CTF]抓住那只猫(XCTF 4th-WHCTF-2017)

    原作者 darkless 题目描述 抓住那只猫 思路 打开页面 有个输入框输入域名 输入baidu com进行测试 发现无任何回显 输入127 0 0 1进行测试 发现已经执行成功 执行的是一个ping命令 一开始想的应该是命令拼接执行 但
  • React18的useEffect会执行两次

    React18的useEffect会执行两次 一 执行两次的useEffect 二 React18 useEffect 新特性 如何应对 1 首先先了解一下 React 中 useEffect 执行的时机 2 怎么样才能让 Effect 执
  • 0101日志-运维-mysql

    1 错误日志 错误日志 Error Log 错误日志记录了MySQL引擎在运行过程中出现的错误和异常情况 这些错误可能包括启动和关闭问题 数据库崩溃 权限问题等 错误日志对于排查和解决MySQL引擎问题非常有帮助 改日志默认开启 默认存放目
  • 知识科普:什么是AGI?

    原文链接 最近ChatGPT大火 火到原来卖酒卖保险的人也都开始直播聊ChatGPT了 其中大家或多或少会提到一个词 AGI 看清楚不是GAI也不是AIGC 今天就和大家聊聊AGI是什么 AGI最近经常被提到 主要是因为ChatGPT的开发
  • 网络编程——TCP

    网络编程 TCP TCP编程 TCP是一种可靠的 基于连接的网络协议 它是面向字节流的 即从一个进程到另一个进程的二进制序列 一条TCP连接需要两个端点 这两个端点需要分别建立各自的套接字 通常一方用于发送请求和数据 称为客户端 另一方用于
  • Pickle 详解

    那么为什么需要序列化和反序列化这一操作呢 1 便于存储 序列化过程将文本信息转变为二进制数据流 这样就信息就容易存储在硬盘之中 当需要读取文件的时候 从硬盘中读取数据 然后再将其反序列化便可以得到原始的数据 在Python程序运行中得到了一