知识拓展:Python序列化模块 marshal 模块详解
Python marshal 模块学习笔记

1. 简介
marshal 是 Python 的内部序列化格式,主要用于序列化和反序列化 Python 对象。它是 Python 字节码(.pyc文件)使用的序列化格式,比 pickle 更原始和受限,但也更快速和安全。
https://docs.python.org/zh-cn/3.9/library/marshal.html?highlight=marshal#module-marshal
2. 核心方法
marshal 模块提供了四个主要方法:
-
marshal.dump(value, file)- 将 Python 对象序列化并写入文件
- 需要以二进制写入模式打开文件(‘wb’)
-
marshal.load(file)- 从文件中读取并反序列化为 Python 对象
- 需要以二进制读取模式打开文件(‘rb’)
-
marshal.dumps(value)- 将 Python 对象序列化为字节串
- 返回 bytes 类型数据
-
marshal.loads(bytes)- 将字节串反序列化为 Python 对象
- 接收 bytes 类型数据
3. 支持的数据类型
marshal 支持以下 Python 数据类型:
- None
- 整数 (int)
- 浮点数 (float)
- 复数 (complex)
- 字符串 (str)
- 元组 (tuple)
- 列表 (list)
- 字典 (dict)
- 布尔值 (bool)
- 字节串 (bytes)
- 代码对象 (code object)
- 冻结集合 (frozenset)
4. 不支持的数据类型
marshal 不支持以下类型:
- 自定义类和实例
- 函数和方法
- 模块
- 文件对象
- 套接字对象
- 其他复杂对象
5. 使用示例
5.1 使用 dump/load 操作文件
import marshal# 写入数据
data = {'name': 'qifumin', 'age': 23}
with open('data.marshal', 'wb') as f:marshal.dump(data, f)# 读取数据
with open('data.marshal', 'rb') as f:loaded_data = marshal.load(f)
5.2 使用 dumps/loads 操作字节串
import marshal# 序列化为字节串
data = {'languages': ['Python', 'Java', 'Go']}
bytes_data = marshal.dumps(data)# 从字节串反序列化
recovered_data = marshal.loads(bytes_data)
6. 注意事项
-
版本兼容性
- 不同 Python 版本之间的 marshal 格式可能不兼容
- 可以通过
marshal.version查看当前版本号
-
使用场景
- 主要用于 Python 内部(如.pyc文件)
- 不建议用于长期存储或跨版本数据交换
-
替代方案
- 一般数据序列化推荐使用
pickle - 跨语言数据交换推荐使用
json - 配置文件推荐使用
yaml
- 一般数据序列化推荐使用
7. 优缺点
优点:
- 执行速度快
- 格式简单
- Python 内置模块,无需额外安装
缺点:
- 不支持复杂对象
- 版本兼容性问题
- 不适合长期存储
- 不支持跨语言使用
8. 最佳实践
- 仅在需要高性能序列化简单数据类型时使用
- 在使用前检查数据类型的兼容性
- 处理文件时使用 with 语句确保正确关闭
- 对于一般用途,优先考虑其他序列化方案
相关文章:
知识拓展:Python序列化模块 marshal 模块详解
Python marshal 模块学习笔记 1. 简介 marshal 是 Python 的内部序列化格式,主要用于序列化和反序列化 Python 对象。它是 Python 字节码(.pyc文件)使用的序列化格式,比 pickle 更原始和受限,但也更快速和安全。 http…...
leetcode 2684. 矩阵中移动的最大次数
题目如下 数据范围 本题使用常规动态规划就行,不过要注意由于有三个转移的方向,所以我们对dp数组的遍历应该是从上到下 从左到右即按列优先遍历。通过代码 class Solution { public:int maxMoves(vector<vector<int>>& grid) {int …...
机械学习基础-6.更多分类-数据建模与机械智能课程自留
data modeling and machine intelligence - FURTHER CLASSIFICATION 混淆矩阵评估指标:灵敏度和特异度ROC 曲线文字说明部分 AUC:ROC曲线下面积 支持向量机思路补充背景知识点积超平面(HYPERPLANES超平面的法向量到超平面的最小距离数据集与超…...
自动化测试实战
http://8.137.19.140:9090/blog_login.htm 账号: lisi 密码: 123456 上面是系统链接 1. 自动化测试的步骤 1.1 编写Web测试用例 1.2 创建空项目添加依赖 然后我们创建一个新的java项目(使用maven管理),然后引入我们的配置文件:屏幕截图,驱动管理,selenium库 <dependency…...
qt QPlainTextEdit总结
QPlainTextEdit 概述 用途:专为处理纯文本设计,适合大文本编辑和简单文本显示(如日志、代码编辑器)。 特点:相比QTextEdit,轻量高效,支持快速加载和滚动大文件,默认不支持富文本。 …...
AWS SES 邮件服务退信/投诉处理与最佳实践指南
在使用 AWS SES 发送邮件时,合理处理退信和投诉是维护发送声誉的关键。本文将详细介绍 SES 中的退信/投诉处理机制以及相关最佳实践。 一、退信处理机制 © ivwdcwso (ID: u012172506) 1.1 退信类型 在 SES 中,退信分为两种类型: 硬退信(Hard Bounce) 永久性错误,如无效…...
理解WebGPU 中的 GPUAdapter :连接浏览器与 GPU 的桥梁
在 WebGPU 开发中, GPUAdapter 是一个至关重要的对象,它作为浏览器与 GPU 之间的桥梁,为开发者提供了请求 GPU 设备、查询 GPU 特性以及获取适配器信息的能力。本文将详细介绍 GPUAdapter 的核心属性和方法,并通过实际代码…...
rpx和px混用方案
(1)创建一个全局的样式配置文件: // styles/variables.scss :root {// 基础字体大小--font-size-xs: 12px;--font-size-sm: 14px;--font-size-md: 16px;--font-size-lg: 18px;// 响应式间距--spacing-xs: 5px;--spacing-sm: 10px;--spacing-…...
光伏设计软件分类:无人机、Unity3D引擎齐上阵
无人机3D设计 无人机可搭载高分辨率光学相机、激光雷达等测绘设备,对目标区域进行全方位、多角度的航拍作业。通过对采集到的影像数据进行导入处理,运用复杂的图像识别算法与三维重建技术,构建出云端实景3D模型,在实景3D模型中进…...
太速科技-616-基于6U VPX XCVU9P+XCZU7EV的双FMC信号处理板卡
基于6U VPX XCVU9PXCZU7EV的双FMC信号处理板卡 一、板卡概述 板卡基于6U VPX标准结构,包含一个XCVU9P 高性能FPGA,一片XCZU7EV FPGA,用于 IO扩展接口,双路HPC FMC扩展高速AD、DA、光纤接口等。是理想应用于高性能数字计算&…...
国产鲲鹏920+欧拉+达梦
1,访问达梦官网 产品下载-达梦数据 1.1,官网没有欧拉的版本; 1.2,拨打客服热线,联系售前单独获取试用版 2,创建鲲鹏920欧拉环境: 2.1,阿里云:没有arm系统 2.2…...
LeetCode--146. LRU 缓存【Golang中的list】
146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,…...
查看notebook的jupyter token
如果你忘记了jupyter的token,那么你可以命令行登录后台,查看。 jupyter notebook list 把token复制下,贴到网站上即可。jupyter登录页已经提示了。...
vue+springboot+webtrc+websocket实现双人音视频通话会议
前言 最近一些时间我有研究,如何实现一个视频会议功能,但是找了好多资料都不太理想,最终参考了一个文章 WebRTC实现双端音视频聊天(Vue3 SpringBoot) 只不过,它的实现效果里面只会播放本地的mp4视频文件&…...
什么是高亮环形光源
高亮环形光源是一种常用于机器视觉、工业检测和光学测量的照明设备。其特点是光线均匀、亮度高,并且呈环形分布,能够为被检测物体提供均匀的照明,减少阴影和反光,提高图像采集的质量。 主要特点: 环形设计:光源呈环形分布,适合安装在镜头周围,能够为物体提供均匀的照明…...
2025年3月一区SCI-混沌进化优化算法Chaotic evolution optimization-附Matlab免费代码
引言 本期介绍了一种基于混沌动力学的元启发式算法-混沌进化优化算法Chaotic evolution optimization,CEO。CEO的主要灵感来源于二维离散记忆映射的混沌演化过程。通过利用记忆映射的超混沌特性,对CEO算法进行数学建模,为进化过程引入随机搜…...
51单片机俄罗斯方块开机动画
/************************************************************************************************************** * 名称:Game_Star * 功能:开机动画 * 参数:NULL * 返回:NULL ******************************************…...
RK3588开发板部署DeepSeek-R1-Distill-Qwen-1.5B的步骤及问题
目录 引言 为什么要做端侧部署 技术发展层面 应用需求层面 开发与成本层面 产业发展层面 模型选择 模型蒸馏 模型转换 量化选择 量化方式 模型大小 计算效率 模型精度 测试 测试程序编译 测试结果 结语 引言 最近DeepSeek已经成为一个非常热门的话题&#x…...
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施 一、前言二、SIEM 系统的功能概述2.1 数据收集与整合2.2 实时监控与威胁检测2.3 事件响应与自动化2.4 合规性管理 三、SIEM 系统选型的关键因素3.1 功能需求评估3.2 可扩展性与性能3.3 易用性与可维…...
DeepSeek接口联调(postman版)
第一步:获取API key 获取APIkeys链接https://platform.deepseek.com/api_keys 点击创建 API key 即可免费生成一个key值,别忘记保存。 第二步:找到deepseek官方接口文档 文档地址:https://api-docs.deepseek.com/zh-cn/ 第三步…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
