在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实现连接mongodb的方法
May 08 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
Python OpenCV获取视频的方法
Feb 28 Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 Python
python文件处理fileinput使用方法详解
Jan 02 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
Python实现快速大文件比较代码解析
Sep 04 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
Dec 21 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 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
中国收音机工业发展史
2021/03/02 无线电
php session的应用详细介绍
2017/03/22 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
Javascript for in的缺陷总结
2017/02/03 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
python django model联合主键的例子
2019/08/06 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
python时间日期操作方法实例小结
2020/02/06 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
影视动画专业个人的自我评价
2013/12/31 职场文书
运动会方阵解说词
2014/02/12 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
教师节简报
2015/07/20 职场文书
关于开学的感想
2015/08/10 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python