在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 16 Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
Python fileinput模块使用介绍
Nov 30 Python
Python多进程同步简单实现代码
Apr 27 Python
MySQL适配器PyMySQL详解
Sep 20 Python
Python3 伪装浏览器的方法示例
Nov 23 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
详解Python time库的使用
Oct 10 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
python爬取新闻门户网站的示例
Apr 25 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/07/17 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
php中序列化与反序列化详解
2017/02/13 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python chardet库识别编码原理解析
2020/02/18 Python
python实现五子棋程序
2020/04/24 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
中青班党性分析材料
2014/02/16 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
提档介绍信范文
2015/10/22 职场文书
对象析构函数__del__在Python中何时使用
2022/03/22 Python