在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 性能优化方法小结
Mar 31 Python
使用python为mysql实现restful接口
Jan 05 Python
python-str,list,set间的转换实例
Jun 27 Python
python实现zabbix发送短信脚本
Sep 17 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
查看keras各种网络结构各层的名字方式
Jun 11 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
用Python自动清理系统垃圾的实现
Jan 18 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 CKEditor 上传图片实现代码
2009/11/06 PHP
php常用数学函数汇总
2014/11/21 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
python如何进行矩阵运算
2020/06/05 Python
python接口自动化框架实战
2020/12/23 Python
AC Lens:购买隐形眼镜
2017/02/26 全球购物
美国保健品专家:Life Extension
2018/05/04 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
仓库管理员岗位职责
2014/03/19 职场文书
气象学专业个人求职信
2014/04/22 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
车间安全生产管理制度
2015/08/06 职场文书
爱护环境建议书
2015/09/14 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL