Python的pickle模块

        pickle 是 Python 标准库中的一个模块,用于对象的序列化(serialization)和反序列化(deserialization)。
        序列化是将对象转换为字节流的过程,而反序列化则是从字节流恢复对象的过程。
        通过 pickle 模块,可以将 Python 对象保存到文件中,或者通过网络传输,以及存储在数据库中。
主要功能
        序列化(dump):将 Python 对象转换为字节流并保存到文件或其它存储介质中。
        反序列化(load):从字节流中读取并重建原始的 Python 对象。
常用函数
        pickle.dump(obj, file, protocol=None):将对象 obj 序列化并写入到文件 file 中。file 需要是以二进制模式打开的文件对象,例如 open('file.pkl', 'wb')。protocol 是序列化协议的版本,可以选择不同的协议以优化性能或兼容性。
        pickle.load(file):从以二进制模式打开的文件 file 中读取并反序列化对象。例如 open('file.pkl', 'rb')。
        pickle.dumps(obj):将对象 obj 序列化为字节对象(bytes),而不是写入文件。
        pickle.loads(bytes_object):从字节对象(bytes)中反序列化并重建对象。
示例
序列化与反序列化到文件:

import pickle# 假设有一个要保存的 Python 对象
data = {"name": "张三", "age": 30, "city": "上海"}# 将对象保存到文件
with open("data.pkl", "wb") as file:pickle.dump(data, file)# 从文件中读取对象
with open("data.pkl", "rb") as file:loaded_data = pickle.load(file)print(loaded_data)  # 输出: {'name': '张三', 'age': 30, 'city': '上海'}

 序列化与反序列化到字节对象:

import pickle# 假设有一个要保存的 Python 对象
data = ["苹果", "香蕉", "梨"]# 将对象序列化为字节对象
serialized_data = pickle.dumps(data)# 从字节对象中反序列化
deserialized_data = pickle.loads(serialized_data)print(deserialized_data)  # 输出: ['苹果', '香蕉', '梨']

注意事项
        安全性:由于 pickle 可以执行反序列化过程中的任意代码,因此从不可信来源加载 pickle 数据可能会带来安全风险。攻击者可以通过恶意构造的 pickle 数据执行任意代码。因此,除非数据来源可信,否则不要轻易使用 pickle.load 或 pickle.loads。
        版本兼容性:不同版本的 Python 可能对 pickle 的协议有不同的支持。高版本的 Python 通常支持低版本的协议,但反之不一定成立。因此,在跨 Python 版本使用 pickle 数据时,需要注意协议的兼容性。
        不可移植性:pickle 数据是特定于 Python 的,因此不能在非 Python 环境中直接使用。如果需要跨语言的序列化方式,可以考虑使用 JSON、XML 或 MessagePack 等。
        性能:在某些情况下,pickle 的性能可能不是最佳选择,尤其是对于非常大的对象。可以考虑使用其他序列化库,如 json(适用于简单数据结构)或 msgpack(更高效的二进制格式)。
常见用途
        持久化存储:将 Python 对象保存到磁盘,以便稍后继续使用。
        缓存:将计算结果缓存到文件中,避免重复计算。
        数据传输:在 Python 程序之间通过网络传输对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名,那么当使用进行 IP 请求时,则将会命中第一个配置的站点 以上图为例,如果用户使用 IP 访问,命中 example.com。 如果域名处填写的分别为域名与泛域名,除非准确命中域名,否…

深入剖析MySQL的索引机制及其选型

在数据库管理系统中,索引是一种重要的优化工具,用于加速数据的检索和查询处理。在MySQL中,合理使用索引可以显著提高数据库的性能。本文将深入探讨MySQL的索引机制,包括不同类型索引的优势、劣势及在实际使用中的选型策略。 1. 什…

将后端返回的网络url转成blob对象,实现pdf预览

调用e签宝返回的数据是网络链接就很让人头疼,最后想到可以转换成blob对象,便在百度上找到方法,记录一下。 祝大家节日快乐!! 代码在最后!!!! 代码在最后!&a…

Yandex搜索广告开户与投放全攻略!

Yandex 是俄罗斯最大的搜索引擎与数字广告平台,在俄罗斯市场具有广泛的影响力和庞大的用户基础。以下是 Yandex 搜索广告开户与投放的全攻略,包括云衔科技支持的相关服务。 一、Yandex 搜索广告的优势 1、广泛的市场覆盖:Yandex 在俄罗斯的…

Git合并多个分支中的提交内容

IDEA中使用 IEAD编辑器中使用Git IEAD编辑器中使用Git 案例一: 把test分支的其中提交的内容合并到main分支上。 你现在通过IDEA开发的分支是test分支,当你在test分支把内容都写完了并且提交内容保存到了本地的git暂存区中的时候,如果此时你的…

接口测试(九)jmeter——关联(JSON提取器)

一、JSON提取器介绍 要检查的响应字段:样本数据源引用名称:可自定义设置引用方法:${引用变量名}匹配数字 匹配数字含义-1表示全部0随机1第一个2第二个…以此类推 缺省值:匹配失败时的默认值ERROR,可以不写 二、js…

C语言——字符串指针和字符串数组

目录 前言 一、定义区别 1、数组表示 2、指针表示 二、内存管理区别 1.字符数组 2.字符指针 三、操作区别 1、访问与修改 2、遍历 3...... 总结 前言 在C语言中,字符串随处可见,字符串是由字符组成的一串数据,字符串以null字符(\0)结尾&#…

记一次js泄露pass获取核心业务

文章目录 一、漏洞原因二、漏洞成果三、漏洞利用过程1.js泄露口令信息2、进入系统后台,管理数据库权限(22个)3、执行命令获取服务器权限4、通过添加扫描脚本,获取存活的内网信息四、免责声明一、漏洞原因 系统存在js泄露口令信息,获取系统超级管理员权限。系统为核心数据研…

ASP.NET MVC-font awesome-localhost可用IIS不可用

环境: win10, .NET 6.0,IIS 问题描述 本地IIS正常显示,但放到远程服务器上,每个icon都显示?。同时浏览器的控制台报错: fontawesome-webfont.woff2:1 Failed to load resource: the server responded with a statu…

Ubuntu下Mysql修改默认存储路径

首先声明,亲身经验,自己实践,网上百度了好几个帖子,全是坑,都TMD的不行,修改各种配置文件,就是服务起不来,有以下几种配置文件需要修改 第一个文件/etc/mysql/my.cnf 这个文件是存…

力扣4:寻找两个正序数的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出:2.00000 解释&a…

linux中的PATH环境变量

在 Ubuntu 系统中,PATH 环境变量是一个非常重要的环境变量,它决定了系统在执行命令时搜索可执行文件的路径。 当你在终端或者脚本中输入一个命令时,系统会在 PATH 环境变量指定的路径列表中依次搜索对应的可执行文件,直到找到第一个匹配的文件并执行。 PATH 环境变量通常包含…

力扣382:链表随机结点

给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。 实现 Solution 类: Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有…

从零学习大模型(七)-----LoRA(中)

自注意力层中的 LoRA 应用 Transformer 的自注意力机制是模型理解输入序列之间复杂关系的核心部分。自注意力层通常包含多个线性变换,包括键(Key)、查询(Query) 和 值(Value) 三个权重矩阵的线…

Vue开发

新建 Vue 项目 vue create project_name按照自己的需求模块进行安装 选择安装 Router、Vuex 插件 选择 Vue3 版本 是否使用 history 模式的路由,按需选 Y 或者 n 后面的选项都默认即可 是否记住上面的选择项:否 总体配置 启动项目 cd demo…

solr安装ik分词器

环境 系统 windows docker v4.34.3 solr:8.11.2 ik:ik-analyzer-solr7-7.x 1.安装步骤 1.1启动solr 1.1启动(为了方便编辑配置文件,挂载了文件目录) docker run -d -p 8983:8983 -v C:\docker\solr\classes:/opt/solr/server/solr-webap…

Windows解决localhost拒绝了连接请求

最近,在开发前端Vue项目时,Vue项目启动成功,没有任何报错,服务控制台已出现APP访问地址,如下图所示。 览器打开后页面先是空白,然后过了一会儿显示无法访问此网站,localhost拒绝了我们的连接请…

【前端】Next.js的安装及配置

Next.js介绍 Next.js 是一个流行的 React 框架,它具有以下优点: 服务器端渲染(SSR):Next.js 支持服务器端渲染,这意味着页面可以在服务器上预渲染,然后发送给用户,这可以加快首屏加…

关于写更新接口的一些理解

“更新”接口的思路 在上篇文章中,我们讲了如何编写删除接口。这篇文章将讲解如何编写更新接口。 其实,更新接口和新增接口非常相似。整体思路都是传入form参数,然后在service层将form转换成entity,最后调用updateById方法&…

idea删除git历史提交记录

前言:此文章是我在实际工作中有效解决问题的方法,做记录的同时也供大家参考! 一、 首先,通过idea的终端或系统的cmd控制台,进入到你的项目文件根目录,idea终端默认就是项目根目录。 二、确保你当前处于要删…