有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。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 marshal loads failed_在Python中marshal对象序列化的相关知识相关推荐

  1. .NET 中的对象序列化 (转载)

    .NET 中的对象序列化 Piet Obermeyer Microsoft Corporation 2001 年 8 月 摘要:为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便 ...

  2. Java I/O中的对象序列化

    Java I/O中的对象序列化 Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象.利用对象的序列化,可以实现轻量级持久性 ...

  3. Java中的对象序列化操作

    文章目录 1 Java中的对象序列化操作 1 Java中的对象序列化操作 首先看一下对象序列化的操作步骤: 创建一个类,继承Serializable接口 创建对象 将对象写入文件 从文件读取对象信息 ...

  4. 【译】Java中的对象序列化

    前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...

  5. python marshal loads failed_Python模块学习:marshal 对象的序列化

    有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上.Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle ...

  6. python json.loads()中文问题-python中文编码json中文输出问题

    python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 un ...

  7. 利用python获取指定url在ATS中缓存对象的信息

    业务需求 给定url,如何查询指定的ATS中是否有该url的缓存对象信息?如果缓存了的话,希望提供该缓存对象的大小,缓存时间,缓存文件名,缓存份数(document alternative)等等信息 ...

  8. python用于导入模块或模块中的对象_在 Python 中导入模块中的对象有哪几种方式? (5.0分)_学小易找答案...

    [判断题]尽管可以使用 import 语句一次导入任意多个标准库或扩展库,但是仍建议每次只导入一个标准库或扩展库. (2.0分) [填空题]表达式 int(str(34)) == 34 的值为 ___ ...

  9. python封装函数、实现将任意的对象序列化到磁盘上_Python系列之lambda、函数、序列化...

    lambda 在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python la ...

最新文章

  1. 深度剖析不一样的Redis架构设计!
  2. python的编程模式-实例讲解Python设计模式编程之工厂方法模式的使用
  3. shell 脚本编写 if else then
  4. Zookeeper的默认选举
  5. 显式Intent 和隐式 Intent 的区别
  6. mysql完全备份 二进制日志_MySQL完全备份脚本:数据+二进制日志+备份日志
  7. 【渝粤教育】电大中专建筑施工组织 (2)作业 题库
  8. lisp取消选集选中状态_为什么对话框创建后是隐藏状态的
  9. Java学习笔记(六)数据的操作(增、删、改的操作)
  10. 《算法竞赛入门经典》————竖式问题
  11. IMX6ULL操作记录
  12. android文件管理器,10款优秀的Android文件管理器
  13. 实验一 Matlab语音处理基本指令
  14. Java程序员培训班有用吗?是否专业
  15. 基于CANdelaStudio制作CDD流程概述
  16. UE4 角色添加武器后 移动出现漂移
  17. pytho sockt编程
  18. 点阵LCD的显示原理
  19. java代码获取银行实时汇率
  20. Linux进程与线程

热门文章

  1. Python离线环境
  2. Hibernate 连接不同数据库的方言
  3. Python高级编程(三)
  4. KindEditor 插件API使用说明
  5. 数据压缩之经典——哈夫曼编码(Huffman)
  6. Silverlight+WCF 新手实例 象棋 游戏房间列表(十三)
  7. 如何赋予自主系统具备持续学习的能力?
  8. 华科新开源文本识别算法:ASTER与DeepLesion数据集百度云下载
  9. 你可能不知道的10个Python Pandas的技巧和特性(下)
  10. 一行Python代码就可以下载任意网站视频,零基础小白也能轻松学会