在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时间整形转标准格式的示例分享
Feb 14 Python
Python简单实现enum功能的方法
Apr 25 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
Python numpy 点数组去重的实例
Apr 18 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
python高阶爬虫实战分析
Jul 29 Python
详解Python的循环结构知识点
May 20 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
为什么说python更适合树莓派编程
Jul 20 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
python代码实现图书管理系统
Nov 30 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 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取进制余数函数代码
2012/01/19 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
JavaScript 变量作用域分析
2011/07/04 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
python基础教程之匿名函数lambda
2017/01/17 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
python视频按帧截取图片工具
2019/07/23 Python
python Tensor和Array对比分析
2020/01/08 Python
python数据爬下来保存的位置
2020/02/17 Python
Python单链表原理与实现方法详解
2020/02/22 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
遗体告别仪式答谢词
2014/01/23 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
超市总经理岗位职责
2014/02/02 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
工作求职自荐信
2014/06/13 职场文书
教师节学生演讲稿
2014/09/03 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
龙门石窟导游词
2015/02/02 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
公司年会开场白
2015/06/01 职场文书
钱学森电影观后感
2015/06/04 职场文书
redis 查看所有的key方式
2021/05/07 Redis
pytorch中[..., 0]的用法说明
2021/05/20 Python
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL