在Python中marshal对象序列化的相关知识


Posted in Python onJuly 01, 2015

有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。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对象。下面是一个例子,演示这两个方法的使用:
 

# coding=gbk
 
import  marshal ,  sys ,  os
 
lst  =  [ 1 ,  ( 2 ,  " string " ) ,  { " key " :  " Value " } ]
 
# 序列化到文件中
fle  =  open ( os . path . join ( os . getcwd ( ) ,  ' fle . txt ' ) ,  ' wb ' )
marshal . dump ( lst ,  fle )
fle . close ( )
 
# 反序列化
fle1  =  open ( os . path . join ( os . getcwd ( ) ,  ' fle . txt ' ) ,  ' rb ' )
lst1  =  marshal . load ( fle1 )
fle1 . close ( )
 
# 打印结果
print  lst
print  lst1
 
# ----  结果  ----
# [1,  (2,  'string'),  {'key':  'Value'}]
# [1,  (2,  'string'),  {'key':  'Value'}]
marshal.dumps(value[, version)

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

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

import  marshal ,  sys ,  os
 
lst  =  [ 1 ,  ( 2 ,  " string " ) ,  { " key " :  " Value " } ]
 
byt1  =  marshal . dumps ( lst )
lst1  =  marshal . loads ( byt1 )
 
# 打印结果
print  lst
print  lst1
 
# —-  结果  —-
# [1,  (2,  'string'),  {'key':  'Value'}]
# [1,  (2,  'string'),  {'key':  'Value'}]

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

Python 相关文章推荐
Python远程桌面协议RDPY安装使用介绍
Apr 15 Python
介绍Python中的fabs()方法的使用
May 14 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
python集合用法实例分析
May 30 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
Python寻找路径和查找文件路径的示例
Jul 10 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
详解Django配置JWT认证方式
May 09 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
python保存字符串到文件的方法
Jul 01 #Python
python选择排序算法实例总结
Jul 01 #Python
python实现的希尔排序算法实例
Jul 01 #Python
python获取一组汉字拼音首字母的方法
Jul 01 #Python
python的keyword模块用法实例分析
Jun 30 #Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 #Python
python实现爬取千万淘宝商品的方法
Jun 30 #Python
You might like
php使用pack处理二进制文件的方法
2014/07/03 PHP
PHP分页类集锦
2014/11/18 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
浅析Python中的多重继承
2015/04/28 Python
Django验证码的生成与使用示例
2017/05/20 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
python实现简单日期工具类
2019/04/24 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
Django app配置多个数据库代码实例
2019/12/17 Python
python实现井字棋小游戏
2020/03/04 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
美国校服网上商店:French Toast
2019/10/08 全球购物
什么是封装
2013/03/26 面试题
营销与策划应届生求职信
2013/11/04 职场文书
中队活动总结
2014/08/27 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
被告代理词范文
2015/05/25 职场文书
值班管理制度范本
2015/08/06 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android
python 详解turtle画爱心代码
2022/02/15 Python
详解Vue3使用axios的配置教程
2022/04/29 Vue.js