当前位置: 首页 > news >正文

知识拓展: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 模块提供了四个主要方法:

  1. marshal.dump(value, file)

    • 将 Python 对象序列化并写入文件
    • 需要以二进制写入模式打开文件(‘wb’)
  2. marshal.load(file)

    • 从文件中读取并反序列化为 Python 对象
    • 需要以二进制读取模式打开文件(‘rb’)
  3. marshal.dumps(value)

    • 将 Python 对象序列化为字节串
    • 返回 bytes 类型数据
  4. 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. 注意事项

  1. 版本兼容性

    • 不同 Python 版本之间的 marshal 格式可能不兼容
    • 可以通过 marshal.version 查看当前版本号
  2. 使用场景

    • 主要用于 Python 内部(如.pyc文件)
    • 不建议用于长期存储或跨版本数据交换
  3. 替代方案

    • 一般数据序列化推荐使用 pickle
    • 跨语言数据交换推荐使用 json
    • 配置文件推荐使用 yaml

7. 优缺点

优点:

  • 执行速度快
  • 格式简单
  • Python 内置模块,无需额外安装

缺点:

  • 不支持复杂对象
  • 版本兼容性问题
  • 不适合长期存储
  • 不支持跨语言使用

8. 最佳实践

  1. 仅在需要高性能序列化简单数据类型时使用
  2. 在使用前检查数据类型的兼容性
  3. 处理文件时使用 with 语句确保正确关闭
  4. 对于一般用途,优先考虑其他序列化方案

相关文章:

  • 坑多多之ac8257 i2c1 rtc-pcf8563
  • JVM的性能优化
  • 【进阶】MySQL高级篇超详讲解!!!
  • TCP/IP参考模型和网络协议
  • 力扣-二叉树-110 平衡二叉树
  • 如何拿捏 unittest 自动化测试框架?
  • websocketpp库使用:快速搭建一个websocket服务端
  • 在带有Intel Arc GPU的Windows上安装IPEX-LLM
  • 【C++】C++ 旅馆管理系统(含 源码+报告)【独一无二】
  • [鸿蒙笔记-基础篇_生命周期篇] Harmony OS
  • 【Azure 架构师学习笔记】- Azure Databricks (11) -- UC搭建
  • oracle查看执行计划
  • 操作系统知识速记:实现线程同步的方式
  • 2025年3月一区SCI-真菌生长优化算法Fungal growth optimizer-附Matlab免费代码
  • python 浅拷贝和深拷贝
  • Java并发中的CAS机制:原理、应用与挑战(通俗易懂版)
  • 【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统
  • c# sqlite 批量生成insert语句的函数
  • ubuntu基于docker部署呼叫中心质检【支持情绪,话术对比】
  • 计算机组成原理—— 总线系统(十一)
  • 免费的视频app哪个好用/网站优化种类
  • 读书网站怎么做/百度识图找原图
  • 一个服务器怎么做两个网站/广州头条新闻最新
  • app网站建设/软文营销经典案例优秀软文
  • 做视频网站的备案要求吗/投广告哪个平台好
  • 怎么给网站做301/代写文章