在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生成指定尺寸缩略图的示例
May 07 Python
Python获取邮件地址的方法
Jul 10 Python
python基础知识小结之集合
Nov 25 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
Python制作钉钉加密/解密工具
Dec 07 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
获取Django项目的全部url方法详解
Oct 26 Python
TensorFlow实现简单卷积神经网络
May 24 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
基于python实现获取网页图片过程解析
May 11 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图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
Python迭代和迭代器详解
2016/11/10 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python读写Excel表格的方法
2021/03/02 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
工程监理应届生求职信
2013/11/09 职场文书
教育孩子心得体会
2014/01/01 职场文书
一帮一活动总结
2014/05/08 职场文书
贷款担保申请书
2014/05/20 职场文书
公司董事长岗位职责
2014/06/08 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
毕业生个人自荐书
2015/03/05 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
导游词之镜泊湖
2019/12/09 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python