在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 连连看连接算法
Nov 22 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
python3正则提取字符串里的中文实例
Jan 31 Python
python处理excel绘制雷达图
Oct 18 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
Python中itertools的用法详解
Feb 07 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
python 如何设置守护进程
Oct 29 Python
Python基础知识之变量的详解
Apr 14 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
phpmyadmin的#1251问题
2006/11/25 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
javascript的BOM
2016/05/03 Javascript
JS原型链怎么理解
2016/06/27 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
pandas重新生成索引的方法
2018/11/06 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
python redis 删除key脚本的实例
2019/02/19 Python
python打开windows应用程序的实例
2019/06/28 Python
Python命令行click参数用法解析
2019/12/19 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
安全生产管理责任书
2014/04/16 职场文书
家长会演讲稿
2014/04/26 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
怒海潜将观后感
2015/06/11 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫