在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进行TCP网络编程的教程
Apr 29 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
python使用super()出现错误解决办法
Aug 14 Python
利用Python如何生成便签图片详解
Jul 09 Python
在Python dataframe中出生日期转化为年龄的实现方法
Oct 20 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
Python类和实例的属性机制原理详解
Mar 21 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
Pytest之测试命名规则的使用
Apr 16 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学习 字符串课件
2008/06/15 PHP
php学习之数据类型之间的转换代码
2011/05/29 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
php绘制圆形的方法
2015/01/24 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
详解Python IO编程
2020/07/24 Python
python statsmodel的使用
2020/12/21 Python
优秀党员获奖感言
2014/02/18 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2015年实习单位评语
2015/03/25 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
Python内置数据类型中的集合详解
2022/03/18 Python