python:marshal --- 内部 Python 对象序列化

此模块包含一此能以二进制格式来读写 Python 值的函数。 这种格式是 Python 专属的,但是独立于特定的机器架构(即你可以在一台 PC 上写入某个 Python 值,将文件传到一台 Sun 上并在那里读取它)。 这种格式的细节有意不带文档说明;它可能在不同 Python 版本中发生改变(但这种情况极少发生)。 1

这不是一个通用的“持久化”模块。 对于通用的持久化以及通过 RPC 调用传递 Python 对象,请参阅 pickle 和 shelve 等模块。 marshal 模块主要是为了支持读写 .pyc 文件形式“伪编译”代码的 Python 模块。 因此,Python 维护者保留在必要时以不向下兼容的方式修改 marshal 格式的权利。 如果你要序列化和反序列化 Python 对象,请改用 pickle 模块 – 其执行效率相当,版本独立性有保证,并且 pickle 还支持比 marshal 更多样的对象类型。

警告 marshal 模块对于错误或恶意构建的数据来说是不安全的。 永远不要 unmarshal 来自不受信任的或未经验证的来源的数据。
不是所有 Python 对象类型都受支持;一般来说,此模块只能写入和读取不依赖于特定 Python 调用的对象。 下列类型是受支持的:布尔值、整数、浮点数、复数、字符串、字节串、字节数组、元组、列表、集合、冻结集合、字典和代码对象,需要了解的一点是元组、列表、集合、冻结集合和字典只在其所包含的值也是这些值时才受支持。 单例对象 None, Ellipsis and StopIteration 也可以被 marshal 和 unmarshal。 对于 version 低于 3 的格式,递归列表、集合和字典无法被写入(见下文)。

有些函数可以读/写文件,还有些函数可以操作字节类对象。

这个模块定义了以下函数:

marshal.dump(value, file[, version])
向打开的文件写入值。 值必须为受支持的类型。 文件必须为可写的 binary file。

如果值具有(或所包含的对象具有)不受支持的类型,则会引发 ValueError — 但是将向文件写入垃圾数据。 对象也将不能正确地通过 load() 重新读取。

version 参数指明 dump 应当使用的数据格式(见下文)。

引发一个 审计事件 marshal.dumps,附带参数 value, version。

marshal.load(file)
从打开的文件读取一个值并返回。 如果读不到有效的值(例如由于数据为不同 Python 版本的不兼容 marshal 格式),则会引发 EOFError, ValueError 或 TypeError。 文件必须为可读的 binary file。

引发一个 审计事件 marshal.load,没有附带参数。

备注 如果通过 dump() marshal 了一个包含不受支持类型的对象,load() 将为不可 marshal 的类型替换 None。
在 3.10 版更改: 使用此调用为每个代码对象引发一个 code.new 审计事件。 现在它会为整个载入操作引发单个 marshal.load 事件。

marshal.dumps(value[, version])
返回将通过 dump(value, file) 被写入一个文件的字节串对象。 值必须属于受支持的类型。 如果值属于(或包含的对象属于)不受支持的类型则会引发 ValueError。

version 参数指明 dumps 应当使用的数据类型(见下文)。

引发一个 审计事件 marshal.dumps,附带参数 value, version。

marshal.loads(bytes)
将 bytes-like object 转换为一个值。 如果找不到有效的值,则会引发 EOFError, ValueError 或 TypeError。 输入的额外字节串会被忽略。

引发一个 审计事件 marshal.loads,附带参数 bytes。

在 3.10 版更改: 使用此调用为每个代码对象引发一个 code.new 审计事件。 现在它会为整个载入操作引发单个 marshal.loads 事件。

此外,还定义了以下常量:

marshal.version
指明模块所使用的格式。 第 0 版为历史格式,第 1 版为共享固化的字符串,第 2 版对浮点数使用二进制格式。 第 3 版添加了对于对象实例化和递归的支持。 目前使用的为第 4 版。

备注

1
此模块的名称来源于 Modula-3 (及其他语言) 的设计者所使用的术语,他们使用术语 “marshal” 来表示以自包含的形式传输数据。 严格地说,将数据从内部形式转换为外部形式 (例如用于 RPC 缓冲区) 称为 “marshal” 而其逆过程则称为 “unmarshal”。

python:marshal --- 内部 Python 对象序列化相关推荐

  1. python基础语法--python语言及其应用

    python基础语法 python引言 python python语言是一种高级动态.完全面向对象的语言. python中函数.模块.数字.字符串都是对象. python完全支持继承.重载.派生.多继 ...

  2. pickle —— Python 对象序列化(python=3.8)

    模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化. "Pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 & ...

  3. python对象序列化或持久化的方法

    http://blog.csdn.net/chen_lovelotus/article/details/7233293 一.Python对象持久化方法 目前为止,据我所知,在python中对象持久化有 ...

  4. python中常用的序列化模块_Python常用模块之pickle——对象序列化

    作用 对Python对象进行序列化,便于存储和传输 Python对象序列化成bytes类型 pickle.dumps(obj) 将Python对象转化为bytes类型 pickle.loads(str ...

  5. python 对象序列化 pickling_[Python]对dat文件的操作:序列化对象

    一:dat文件 在我之前的博客中,我介绍了对txt文件操作的一些相关知识,以及如何对其进行读写操作,也介绍了文本文件和二进制文件的一些区别.虽然对txt文件操作已经能够满足储存数据的需求,但txt文件 ...

  6. python封装函数、实现将任意的对象序列化到磁盘上_Python系列之lambda、函数、序列化...

    lambda 在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python la ...

  7. python的序列化是什么意思_python 什么是对象序列化

    我们知道在Python中,一切皆为对象,实例是对象,类是对象,元类也是对象.本文正是要聊聊如何将这些对象有效地保存起来,以供后续使用. pickle与cPickle pickle模块可以将Python ...

  8. python 对象序列化 pickling_python操作文件——序列化pickling和JSON

    当我们在内存中定义一个dict的时候,我们是可以随时修改变量的内容的: >>> d=dict(name='wc',age=28)>>>d {'name': 'wc' ...

  9. [转载] pickle:让python对象序列化

    参考链接: pickle - Python对象序列化 一.dump()方法 pickle.dump(obj, file, [,protocol]) 注释:序列化对象,将对象obj保存到文件file中去 ...

最新文章

  1. Grails精华:使用Groovy SQL
  2. Netty自定义协议
  3. execjs执行js出现window对象未定义时的解决_10个常见的JS语言错误总汇
  4. 10-2 5-2 查询至少生产两种不同的计算机(PC或便携式电脑)且机器速度至少为133的厂商 (20 分)(思路加详解+测试用例)
  5. [Qt入门]模态和非模态对话框创建
  6. ECC 公钥加密 使用相同的ECC公钥对 对 相同的数据进行加密,每次的加密结果是一致的吗?
  7. oracle的al32utf8,oracle字符集修改(AL32UTF8-UTF8)
  8. Springboot启动报错:DEBUG org.springframework.boot.diagnostics.FailureAnalyzers
  9. 数据上报java_通过Jaeger上报Java应用数据
  10. mysql缺失值处理方法,插值MySQL表中的缺失值
  11. Linux检测内存泄露的脚本
  12. 软件multisim的安装教程
  13. 接入Internet的技术有哪几种?各有什么特点?
  14. 如何让全屏游戏的文本编辑框支持IME和TSF输入法
  15. 范德堡计算机科学硕士,美国范德堡大学计算机科学专业怎么样?
  16. JAVA 实现 名单按姓氏笔画为序排列
  17. 网页游戏未来发展的一些趋势
  18. NOIP2021题解~持续更新
  19. 华为与android连接方法,华为手机怎样与电脑连接?安卓手机连接电脑的方法介绍...
  20. YOLOv5、v7改进之二十六:改进特征融合网络PANet为ASFF自适应特征融合网络

热门文章

  1. ChatGPT可能影响IT行业哪些岗位
  2. Windows 10里的WSL Ubuntu 怎么使用Windows系统的 SS 代理?
  3. 大数据开发遇坑大杂烩
  4. css3实现漂亮的倒影效果
  5. jquery mouseleave和mouseout的区别
  6. 6、未经授权访问漏洞
  7. python程序封装
  8. 色盲测试,没人能过6关!
  9. Beyond Tracking:Selecting Memory and Refining Poses for Deep Visual Odometry学习笔记
  10. 无人机飞控--科普贴