有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。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对象。下面是一个例子,演示这两个方法的使用:

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)

将二进制流反序列化为对象。下面的一段代码,演示这两个方法的使用:

Pythonimport   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手册。

本文来自投稿,不代表访得立场,如若转载,请注明出处:http://www.found5.com//view/348.html

python marshal loads failed_Python模块学习:marshal 对象的序列化相关推荐

  1. python 的日志logging模块学习

    2019独角兽企业重金招聘Python工程师标准>>> python 的日志logging模块学习 分类: python 2011-08-02 23:51 8338人阅读 评论(0) ...

  2. python marshal loads failed_python使用marshal模块序列化实例

    本文实例讲述了python使用marshal模块序列化的方法,分享给大家供大家参考.具体方法如下: 先来看看下面这段代码: ?1234567891011121314151617181920212223 ...

  3. python marshal loads failed_python – Marshal反序列化 – 不安全

    我在一个项目中工作,我使用cPickle快速加载文件.几天前我读到,元帅甚至可能比cPickle更快.它对我有用,但我很好奇,the documentation的这个警告是关于: Warning Th ...

  4. python中的glob 模块学习文件路径查找

    glob glob.glob(pathname), 返回所有匹配的文件路径列表.它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径. import glob ...

  5. python jsonpath-rw_Python使用jsonpath-rw模块处理Json对象操作示例

    本文实例讲述了Python使用jsonpath-rw模块处理Json对象操作.分享给大家供大家参考,具体如下: 这两天在写一个爬虫,需要从网站返回的json数据提取一些有用的数据. 向url发起请求, ...

  6. python使用教程cmd啥意思-Python 中的cmd模块学习

    Python中的cmd模块类型提供了一个创建命令行解析器的框架.简单的来说,可以继承Cmd来创建命令行界面,然后对所有想处理的命令command执行do_command方法.默认情况下,它使用read ...

  7. Python中的pandas模块学习

    本文是基于Windows系统环境,学习和测试pandas模块: Windows 10 PyCharm 2018.3.5 for Windows (exe) python 3.6.8 Windows x ...

  8. Python中re(正则表达式)模块学习

    re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import re text = "JGood is a handsome boy, he ...

  9. 【Python2】使用python中的turtle模块学习海龟绘图(有趣的python初体验)(最全最详细的turtle介绍使用)

    目录 海龟绘图 Python中tkinter的mainloop函数实质 turtle模块里的方法 Python绘图Turtle库详解 turtle绘图的基础知识: 海龟绘图 海龟绘图是Python中非 ...

最新文章

  1. silver light
  2. 整数分解为若干项之和
  3. Flutter进阶—质感设计之直接输入
  4. 部署LNMP高可用负载群集
  5. 如何更新计算机的flash player,如何在win7电脑中Adobe Flash Player自动更新?
  6. 【Gym-100889 H】Hitting Points【凸包三分】
  7. NYOJ 部分和问题
  8. 格拉姆矩阵 Gram Matrix 简单理解
  9. 怎样开始入门学计算机,新手如何开始学电脑 新手学电脑从何入门
  10. ff14怎么显示服务器时间,《FF14》8月20日维护到几点 最终幻想14服务器迁移维护公告...
  11. MySQL入门笔记(五):另存数据为文件(导出数据)
  12. 计算机类专科学校排名,2017计算机专科学校排名一览表
  13. 转战物联网·基础篇03-从JSON数据到短指令谈思维的转变
  14. 【Python数据分析】房价数据分析实战(包含源码和数据)
  15. C语言实现,输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  16. ChatGPT惨遭围剿?多国封杀、近万人联名抵制……
  17. java双端队列工作密取,同步器皿、并发容器、阻塞队列、双端队列与工作密取...
  18. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能
  19. MCU开发学习一 地址跳转(自升级的应用)
  20. minicom的使用

热门文章

  1. Linux下socket编程:TCP连接
  2. @keyup.enter.native
  3. ppt在线快速转换成pdf的方法
  4. yuv数据(nv12和nv21)和RGB数据之间转换的c++代码
  5. 《卓有成效的管理者》——学习心得(四)
  6. 如何从request中获取域名
  7. LWN:万维网之外的选择!
  8. 软考中级【数据库系统工程师】第1章:计算机系统知识,自学软考笔记,备考2022年5月份软考,计算机硬件系统CPU组成指令寄存器组总线输入输出的程序控制方式计算机体系结构与存储系统加密技术流水线技术
  9. __dirname与__filename
  10. java代码审计_Java代码审计| Spring框架思路篇