在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中利用sorted()函数排序的简单教程
Apr 27 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
python使用PyQt5的简单方法
Feb 27 Python
python批量识别图片指定区域文字内容
Apr 30 Python
eclipse创建python项目步骤详解
May 10 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Python 单例设计模式用法实例分析
Sep 23 Python
python matplotlib折线图样式实现过程
Nov 04 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
pycharm中leetcode插件使用图文详解
Dec 07 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下载远程图片函数 可伪造来路
2013/06/25 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
潜说js对象和数组
2011/05/25 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
python定时器使用示例分享
2014/02/16 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
Python根据成绩分析系统浅析
2019/02/11 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
英语翻译系毕业生求职信
2013/09/29 职场文书
大四毕业生学习总结的自我评价
2013/10/31 职场文书
汽车广告策划方案
2014/05/31 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
2014年财政局工作总结
2014/12/09 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
详解Python中下划线的5种含义
2021/07/15 Python