python 中数据序列化与反序列化(marshal)

python:marshal --- 内部 Python 对象序列化 阅读详情

  有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle等等。今天就讲讲marshal模块。

 

  注意: marshal并不是一个通用的模块,在某些时候它是一个不被推荐使用的模块,因为使用marshal序列化的二进制数据格式还没有文档化,在不同版本的Python中,marshal的实现可能不一样。也就是说,用python2.5序列为一个对象,用python2.6的程序反序列化所得到的对象,可能与原来的对象是不一样的。但这个模块存在的意义,正如Python手册中所说:The marshal module exists mainly to support reading and writing the “pseudo-compiled” code for Python modules of .pyc files.

下面是marshal模块中定义的一些与序列化/反序列化有关的函数:

marshal.dump(value, file[, version])

  将值写入到一个打开的输出流里。参数value表示待序列化的值。file表示打开的输出流。如:以”wb”模式打开的文件,sys.stdout或者os.popen。对于一些不支持序列类的类型,dump方法将抛出ValueError异常。要特别说明一下,并不是所有类型的对象都可以使用marshal模块来序列化/反序列化的。在python2.6中,支持的类型包括:None , integers, long integers, floating point numbers, strings, Unicode objects, tuple, list, set, dict, 和 code objects。对于tuple, list, set, dict等集合对象,其中的元素必须也是上述类型之一。

marshal.load(file)

  执行与marshal.dump相反的操作,将二进制数据反序列为Python对象。下面是一个例子,演示这两个方法的使用:

1 # coding=gbk
2  
3 import   marshal ,   sys ,   os
4  
5 lst   =   [ 1 ,   ( 2 ,   " string " ) ,   { " key " :   " Value " } ]
6  
7 # 序列化到文件中
8 fle   =   open ( os . path . join ( os . getcwd ( ) ,   ' fle . txt ' ) ,   'wb ' )
9 marshal . dump ( lst ,   fle )
10 fle . close ( )
11  
12 # 反序列化
13 fle1   =   open ( os . path . join ( os . getcwd ( ) ,   ' fle . txt ' ) ,   'rb ' )
14 lst1   =   marshal . load ( fle1 )
15 fle1 . close ( )
16  
17 # 打印结果
18 print   lst
19 print   lst1
20  
21 # ----   结果   ----
22 # [1,   (2,   'string'),   {'key':   'Value'}]
23 # [1,   (2,   'string'),   {'key':   'Value'}]

marshal.dumps(value[, version)

  该方法与上面讲的marshal.dump()功能类似,只是它返回的是序列化之后的二进制流,而不是将这些数据直接写入到文件中。

marsahl.load(string)

  将二进制流反序列化为对象。下面的一段代码,演示这两个方法的使用:

1 import   marshal ,   sys ,   os
2  
3 lst   =   [ 1 ,   ( 2 ,   " string " ) ,   { " key " :   " Value " } ]
4  
5 byt1   =   marshal . dumps ( lst )
6 lst1   =   marshal . loads ( byt1 )
7  
8 # 打印结果
9 print   lst
10 print   lst1
11  
12 # ----   结果   ----
13 # [1,   (2,   'string'),   {'key':   'Value'}]
14 # [1,   (2,   'string'),   {'key':   'Value'}]
  

 

  更多关于marshal的内容,请参考Python手册。

上述文章转自:http://blog.youkuaiyun.com/mldxs/article/details/8574518


vitual_func博主备注:pickle 模块中的函数与 marshal 完全相同,包括功能与函数接口。但是Pickle 能将递归对象,用户自定义类和实例进行序列化与反序列化。

知识拓展:Python序列化模块 marshal 模块详解 marshal 是 Python 的内部序列化格式,主要用于序列化和反序列化 Python 对象。它是 Python 字节码(.pyc文件)使用的序列化格式,比 pickle 更原始和受限,但也更快速和安全。 阅读详情

相关推荐

配电网故障重构/孤岛划分/故障恢复

程序主要复现《基于GA_BFGS算法的配电网故障恢复性重构研究_郑海广》,采用matlab编程软件实现,依据网络结构和DG供电方式对配电网进行孤岛划分,将含有 DG 的配电网拓扑结构看成一个树,搭建成连通图模型,使得将孤岛的划分变成了求取最小生成树,以网损和开关开断次数作为目标,采用 IEEE33 节点配电网为算例,通过遗传算法寻优计算,从而得到最佳的重构方案。

zhangxd212489的博客 2500

一文了解Python常见的序列化操作

1.marshal marshal使用的是与Python语言相关但与机器无关的二进制来读写Python对象的。这种二进制的格式也跟Python语言的版本相关,marshal序列化的格式对不同的版本的Python是不兼容的。 marshal一般用于Python内部对象的序列化。 一般地包括: 基本类型 booleans, integers,floating point numbers,complex numbers 序列集合类型 strings, bytes, bytearray, tuple, list,

Python热爱者的博客 862

基于单片机负载控制的无人机电气设备监测系统设计

为深入分析无人机电气设备的电子负载性能,实现对传输电子量的合理性监管与控制,设计基于单片机负载控制的无人机电气设备监测系统;利用电气信号发生电路,构建负载网络控制器与以太网模块运行所需的电气设备负载环境,借助PCB监控板建立PLC扩展负载模块与核心监控主机之间的物理连接关系,实现无人机电气设备监测系统的硬件执行环境搭建;在此基础上,通过STM32型单片机移植协议,确定无人机电气设备通信主机的现有组态形式,联合已设定的监控任务有线级条件,实现监测系统的软件执行环境搭建,完成基于单片机负载控制的无人机电气设备监

weixin_45905610的博客 1300

Python marshal模块 主要函数 marshal.dump(object, file) Marshal.dumps(object) Marshal.load——《跟老吕学Python编程》

是一个强大的工具,用于在Python中处理二进制数据。通过了解它的功能和限制,你可以更有效地使用它来序列化和反序列化Python对象。然而,由于它的限制,如果你需要处理更复杂的对象或需要在不同的Python版本或平台上交换数据,你可能需要考虑使用其他序列化模块,如pickle或json。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《跟老吕学Python编程》《Python游戏开发实战讲解》《Python Web开发实战》《Python网络爬虫实战》

Python老吕的博客 1584

Ansys -PEmag 平面变压器仿真与circuit电路模型验证

ansys 软件集成了电路、磁路、PCB参数提取,结构参数提取等功能仿真,基于内置模块的功能参数的仿真后可以提取出主要关键参数,寄生参数,频域响应参数等。该软件的优势在于能够将所有的仿真参数导出为电路模型文件,可以在自带的模块中仿真也可以导出在其他第三方软件中仿真,比如matlab-simulink文件扥。主要介绍ANSYS插件的使用,对PEmag做了详细使用说明并通过案例得到对用的变压器参数;基于变压器参数再将其磁路模型导入到电路中进行建模仿真,实现PEmag与circuit的联合仿真。

weixin_41609745的博客 3016

H5 获取手机GPS坐标

只要手机有GPS模块,可以用HTML5的Geolocation接口获取 在HTML5中,geolocation作为navigator的一个属性出现,它本身是一个对象,拥有三个方法: getCurrentPosition watchPosition clearWatch 1.简单 function getLocation(){ if(navigator.geolocation){ //判断是否有这个对象 navigator.geoloc

达拉崩巴斑得贝迪卜多比鲁翁_ 4669

Python模块学习 ---- marshal 对象的序列化

  有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle等等。今天就讲讲marshal模块。   注意:marshal并不是一个通用的模块,在某些时候它是一个不被推荐使用的模块,因为使用marshal序列化的二进制数据格式还没有文档化,在不

6172

Android13 CarPowerManagementService onApPowerStateChange流程分析

如下为CarPower上电的流程图:下面我们从代码角度分析:在CPMS的init方法中会调用onApPowerStateChange(CpmsState.WAIT_FOR_VHAL, CarPowerManager.STATE_WAIT_FOR_VHAL); 设置ApPowerState为STATE_WAIT_FOR_VHAL: 在onApPowerStateChange中调用PowerHandler 的handlePowerStateChange方法: 在handlePowerStateChang

liuning1985622的博客 925

python-文件操作:marshal

''' python程序将多个数据存储到文件中 ''' # 数据准备 s = "字符串" i = 19 f = 3.1415926 b = True c = 5 + 2p l = [2, "你好", 8] d = {"username": "admin", "password": "123"} #将上面多个数据放在同一个列表中 x = [s, i, f, b, c, l, d]

weixin_44606322的博客 591

.NET MAUI 第13讲 深入探索 .NET MAUI Essentials:让应用感知设备与环境,打造智能体验

摘要:本文介绍了.NET MAUI Essentials库如何赋能移动应用感知设备环境的能力。文章详细讲解了设备信息获取(DeviceInfo)、网络状态监测(Connectivity)、地理位置服务(Geolocation)、地图集成(Map)以及传感器(Accelerometer等)等核心功能的使用方法,并提供了完整的代码示例。通过一个综合练习,展示了如何构建设备信息仪表板,实时显示设备参数和网络状态,并实现位置获取与地图导航功能。这些跨平台API能显著提升应用智能化和用户体验,同时保持代码简洁高效。

AlphaNil的博客 1088

YOLOv11的对比学习预训练改进-(通过SimCLR预训练增强特征提取)

本文介绍了将SimCLR对比学习预训练与YOLOv11目标检测模型相结合的创新方法。文章首先概述了目标检测领域的发展现状和YOLOv11的架构优化,包括主干网络、特征金字塔和检测头的改进设计。其次详细解析了SimCLR对比学习的核心原理,涵盖数据增强、投影头设计和NT-Xent损失函数。最后探讨了如何将对比学习与目标检测有效结合,通过特征空间对齐和渐进式微调策略提升模型性能。该方法显著增强了特征提取能力,提高了检测精度和训练效率,特别是在小目标和遮挡目标的检测上表现突出。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 685

Python序列化和反序列化

本文介绍了Python中三种序列化工具:json、pickle和marshal。序列化是将数据转换为可存储/传输格式的过程,反序列化则是将序列化数据还原为Python对象。json模块支持跨语言数据交换(dumps/dump序列化,loads/load反序列化),pickle是Python专用的二进制序列化方案,marshal则提供高性能序列化能力。三者主要区别在于:json具有跨平台性但功能有限,pickle支持完整Python对象但存在安全隐患,marshal性能最优但兼容性差,适用于特定场景。开发者应

Messsgo的博客 417

SAP_SD模块-销售批次策略应用记录

SAP_SD模块-销售批次策略完整案例

风沙的博客 2610

java marshal 序列化_marshal 对象的序列化

有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle等等。今天就讲讲marshal模块。注意:marshal并不是一个通用的模块,在某些时候它是一个不被推荐使用的模块,因为使用marshal序列化的二进制数据格式还没有文档化,在不同版本的Python...

weixin_35414437的博客 795

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python marshal loads failed_python使用marshal模块序列化实例

本文实例讲述了python使用marshal模块序列化的方法,分享给大家供大家参考。具体方法如下:先来看看下面这段代码:?12345678910111213141516171819202122232425262728 import marshal data1 = ['abc',12,23,'jb51'] #几个测试数据 data2 = {1:'aaa',b:'dad'} data3 = (1,2,...

weixin_35823403的博客 1082

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python中对象数据的持久化操作

对象数据的持久化操作指的是将Python程序中的对象保存到某种形式的持久化存储介质(如文件、数据库)中,以便在程序重新运行或在其他程序中使用时能够重新加载这些对象。持久化操作可以确保数据在程序关闭后不会丢失,并且可以在需要时重新加载以恢复程序的状态。在Python中,对象数据的持久化操作通常涉及将对象序列化为某种格式,存储到文件或数据库中,然后在需要时反序列化以恢复对象。

weixin_73921499的博客 897

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python学习之——序列化与反序列化

Python学习之——序列化与反序列化

selfsongs 1035

python使用marshal模块序列化实例

转自  http://www.jb51.net/article/55645.htm 本文实例讲述了python使用marshal模块序列化的方法,分享给大家供大家参考。具体方法如下: 先来看看下面这段代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

ncafei的博客 4000

python序列化模块marshal和cPickle的效率比较

<!-- html {font-family:Times,serif; font-size:12pt} .title {text-align:center} .todo {color:red} .done {color:green} .tag {background-color:#add8e6; font-weight:normal} .timestamp

LittleGrizzly的专栏 2824

python marshal 对象序列化和反序列化

  有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle等等。今天就讲讲marshal模块。   注意:marshal并不是一个通用的模块,在某些时候它是一个不被推荐使用的模块,因为使用marshal序列化的二进制数据...

weixin_30680385的博客 99

Python interview - Marshal & JSON & Pickle

Python中有很多模块提供了序列化与反序列化的功能,比如marshal,pickle,cPickle。可以在需要的时候把对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。 If you’re serializing and de-serializing Python objects, use the pickle module instead – the perform

800

Python标准库中的marshal模块

 marshal-内部的Python对象序列化         该模块包含可以以二进制格式读取和写入Python值的函数。该格式是针对Python的,但独立于机器架构问题(例如,您可以将Python值写入PC上的文件,将文件传输到Sun,并在那里读取它)。使用marshal序列化的二进制数据格式还没有文档化,它可能会在Python版本之间发生变化(尽管很少发生)。        

李世铭的博客 8418

Python使用marshal模块操作二进制文件

Python标准库marshal可以进行对象的序列化和反序列化。>>> import marshal# 待序列化的对象>>> x1 = 30>&g...

董付国的Python专栏 332

pickle与其他Python模块间的关系 Pickle与Marshal间的关系 Pickle与json模块的比较 总结——《跟老吕学Python编程》

pickleMarshal和json都是Python中处理数据序列化和反序列化的重要工具,但它们在用途、安全性、兼容性和性能等方面有所不同。开发者在选择使用哪个模块时,需要根据具体需求和应用场景进行权衡。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《跟老吕学Python编程》《Python游戏开发实战讲解》《Python Web开发实战》《Python网络爬虫实战》《Python APP开发实战》🌐《HTML》《CSS》《Vue》💻《C语言》《C++语言》

Python老吕的博客 1274

pickle --- Python 对象序列化

3.8 新版功能.有时,可能不够灵活。特别是当我们想要基于对象类型以外的其他规则来对封存进行定制,或是当我们想要对函数和类的封存进行定制的时候。对于那些情况,可能要基于Pickler类进行子类化并实现方法。此方法可返回任意的归约元组 (参见它也可以选择返回来回退到传统行为。如果同时定义了和,则方法具有优先权。备注出于性能理由,可能不会为以下对象调用NoneTrueFalse, 以及intfloatbytesstrdictsetfrozensetlist和tuple的具体实例。

C'mon的博客 338
上一篇: 哪些函数不能被声明为虚函数
下一篇: python无参数的装饰符
Virtual_Func
博客等级 码龄11年 38粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值