Python中序列化利器pickle使用详解

✨前言:

🌟什么是pickle?

Python 中的 pickle 模块是一个序列化和反序列化Python对象结构的工具,也就是说它可以把Python中任意一个对象转化为一串字节流,也可以将这串字节流重新恢复为原来的对象。这个过程也分别被称为“pickling”(序列化)和“unpickling”(反序列化)。

🌟使用 pickle 的原因包括:

数据持久化:保存对象状态,以便以后可以重新加载,不需要重复计算。
传输数据:可以将序列化的字节流在网络中传输,或在不同的程序之间共享数据。
缓存:对于耗时的计算结果可以进行缓存,提高程序执行效率。
pickle 的优点有:

Python原生支持,无需额外安装模块。
可以序列化几乎所有的Python数据类型。
使用简单,接口直观。
要注意的是,pickle 也有一些缺点,例如安全性问题(不应对不信任的数据使用pickle进行反序列化)和跨语言通信问题(pickle格式不是通用标准,主要用在Python中)。

🌟下面是 pickle 的基本用法示例:

🌟1.序列化(pickling)到文件
import pickle# 一个示例对象
data = {'a': [1, 2.0, 3, 4+6j],'b': ("character string", b"byte string"),'c': {None, True, False}
}# 序列化到文件
with open('data.pickle', 'wb') as f:pickle.dump(data, f)
🌟2.从文件反序列化(unpickling)
import pickle# 从文件读取数据并反序列化
with open('data.pickle', 'rb') as f:data_loaded = pickle.load(f)print(data_loaded)
# {'a': [1, 2.0, 3, (4+6j)], 'b': ('character string', b'byte string'), 'c': {None, True, False}}
🌟3.序列化到字节流
import pickledata = {'a': [1, 2, 3], 'b': 'string data'}# 序列化为字节流
bytes_data = pickle.dumps(data)print(bytes_data)  # 打印序列化后的字节流
🌟4.从字节流反序列化
import pickle# 假设 bytes_data 是已序列化的字节流
bytes_data = b'\x80\x04\x95%\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x01a\x94]\x94(K\x01K\x02K\x03e\x8c\x01b\x94\x8c\x0bstring data\x94u.'# 从字节流反序列化
data_loaded = pickle.loads(bytes_data)print(data_loaded)

✨小结:

在使用 pickle 时有几项注意事项:
pickle 使用的是二进制操作,因此读写文件时要使用二进制模式(‘wb’ 或 ‘rb’)。
不同的Python版本中,pickle 序列化的协议可能不同,为了兼容性考虑,可以在 dump() 和 dumps() 函数中指定协议,例如使用protocol=pickle.HIGHEST_PROTOCOL 或 protocol=0。
需要保证序列化和反序列化的环境中具有相同的类和函数定义。
应对 pickle 数据进行校验,不要从不可信的源反序列化数据,以防执行恶意代码。
pickle 是一个强大的序列化工具,但必须小心谨慎地使用,特别是在涉及安全性的场合。在进行跨版本或网络间的数据传输时可能需要考虑使用其他格式如JSON(如果只涉及基础数据类型)或messagepack等更加通用的序列化格式。

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

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

相关文章

Monorepo(单体仓库)与 MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南

🔥 个人主页:空白诗 文章目录 一、引言1. Monorepo 和 MultiRepo 简介2. 为什么选择 Monorepo? 二、Monorepo 和 MultiRepo 的区别1. 定义和概述2. 各自的优点和缺点3. 适用场景 三、Monorepo 的开发策略1. 版本控制2. 依赖管理3. 构建和发布…

python-切片、集合

序列是指:内容连续、有序,可使用下标索引的一类数据容器 序列的常用操作 - 切片 切片的语法 序列的常用操作 - 切片 注意切片的范围是左闭右开 为什么使用集合 集合的常用操作 - 修改 集合的常用操作 - 集合长度 集合常用功能总结 集合的特点

程序员鱼皮的写简历指南(保姆级)2、简历优化

大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致措施了很多面试机会,实在是…

AI时代来临,程序员如何应对AI挑战?

随着 AI 技术的飞速发展,特别是大模型的出现,传统的程序员角色正在经历深刻的变革,AI 已经对现有的软件开发模式和程序员的工作模式造成了冲击,并且大语言模型在某些特定语言内的表现甚至超过了大部分的程序员。 但人工智能没有情…

深度学习——卷积神经网络(convolutional neural network)CNN详解(一)——概述. 步骤清晰0基础可看

在CNN的学习过程中我会提供相应的手算例子帮助理解训练过程。 其他关于神经网络的学习链接如下: 一、了解卷积神经网络 卷积神经网络的作用 总的来说,卷积神经网络的第一个主要作用是对图像进行特征提取,所谓特征提取,就是明白…

java入门-基础语法(运算符)

运算符是对变量、字面量进行运算的 符号 (一)基本的算术运算符、符号做连接符 (1)基本运算符:(加), - (减)、 * (乘)、 / (除)、%&…

Nginx 的详细介绍,包括其特点、安装、配置、应用场景及最佳实践

Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。它由俄罗斯人伊戈尔赛索耶夫(Igor Sysoev)开发,并于 2004 年首次公开发布。Nginx 以其轻量级、高并发、稳定性强等特点,在 Web …

有哪些好的 Stable Diffusion 提示词(Prompt)可以参考?

Docker 作图咒语生成器 docker-prompt-generator 是一个开源项目,可以利用模型反推出提示词,让你偷偷懒,无需琢磨怎么写prompt,只需要找一个差不多的模型反推一下,直接用就好了,支持支持 MidJourney、Stab…

linux中的进程以及进程管理

程序和进程的区别和联系 程序(Program): 程序是一组指令的集合,通常存储在磁盘或其他存储设备上,是一种静态的概念。程序本身并没有运行,它只是一个可执行的文件或脚本,包含了一系列的指令和数…

42、nginx之nginx.conf

nginx----web服务器 一、nginx http就是apache,在国内很少。 nginx是开源的,是一款高性能,轻量级的web服务软件。 稳定性高,而且版本迭代比较快(修复bug速度比较快,安全性快) 消耗系统资源…

uni-app打包小程序的一些趣事~

前言 Huilderx版本&#xff1a;4.15 uni-app Web端版本&#xff1a;3.4.21 问题1 Web端/APP端样式好好的&#xff0c;打包微信小程序就乱了咋整&#xff1f; 使用::v-deep/::deep/deep(){}都是没用滴~~ 原因&#xff1f; 解决&#xff1a; <script lang"ts"…

python小练习04

三国演义词频统计与词云图绘制 import jieba import wordcloud def analysis():txt open("三国演义.txt",r,encodingutf-8).read()words jieba.lcut(txt)#精确模式counts {}for word in words:if len(word) 1:continueelif word "诸葛亮" or word &q…

《昇思25天学习打卡营第06天|网络构建》

网络构建 神经网络模型由神经网络层和Tensor操作构成 #实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.…

Python作用域及其应用

Python的作用域规则决定了变量在代码中的可见性和访问性。全局作用域中定义的变量可以在整个程序中访问&#xff0c;而局部作用域中定义的变量则只能在其被创建的函数或代码块中访问。 全局作用域与局部作用域 全局作用域中的变量通常在程序的顶层定义&#xff0c;可以被整个…

RK3568驱动指南|第十五篇 I2C-第183章 SMBus总线介绍

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

商业模式的6大要素,新零售起盘策划公司,顶层设计方案服务商

在当今的商业世界中&#xff0c;企业通过不同的商业模式来实现自身的发展和利润。下面介绍六种常见的商业模式。 坐标&#xff1a;厦门&#xff0c;我是易创客肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 1、互联…

常用知识点问答

目录 描述 Nginx location转发时root和alias指定路径的区别&#xff1f; LVS Haproxy Nginx负载均衡都有哪些常用的调度算法&#xff1f;(每种要求不少于5个) Nginx 4层反向代理和7层反向代理有什么区别&#xff1f;以及如何配置&#xff1f; 如何实现Nginx负载均衡的高可用…

使用DelayQueue实现延迟任务

有时候&#xff0c;我们需要在当前时间点往后延迟一定时间&#xff0c;再执行任务&#xff0c;该怎么实现呢&#xff1f; 1. 延迟任务方案 延迟任务的实现方案有很多&#xff0c;常见的有四类&#xff1a; DelayQueueRedissonMQ时间轮原理JDK自带延迟队列&#xff0c;基于阻塞…

实验室必备神器:PFA气体装置,精准控制每一丝气体!

PFA气体吸收装置是一种高效的气体处理设备&#xff0c;主要用于捕获、存储和转移各种气体样本&#xff0c;特别是在需要高纯度气体的应用场合中表现出色。以下是关于PFA气体吸收装置的详细介绍&#xff1a; 一、特点与优势 1. 高效吸收&#xff1a;采用先进的物理和化学吸收技术…

C++ double free

C double free 原因 原因 局部指针重复释放 指针非 NULL时释放一次&#xff0c;且 function结束时又free一次循环越界&#xff0c;导致内存越界