在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实现抓取城市的PM2.5浓度和排名
Mar 19 Python
pygame加载中文名mp3文件出现error
Mar 31 Python
django进阶之cookie和session的使用示例
Aug 17 Python
pandas ix &iloc &loc的区别
Jan 10 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
python绘制彩虹图
Dec 16 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
linux 下selenium chrome使用详解
Apr 02 Python
python实现交并比IOU教程
Apr 16 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
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数组是否为空的代码
2011/09/08 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python中函数参数匹配模型详解
2019/06/09 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
Python for循环及基础用法详解
2019/11/08 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
优秀求职信范文分享
2014/01/26 职场文书
合作经营协议书范本
2014/09/16 职场文书
小学生校园广播稿
2014/09/28 职场文书
六查六看剖析材料
2014/10/06 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL