python marshal loads failed_在Python中marshal对象序列化的相关知识
有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上。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对象序列化的相关知识相关推荐
- .NET 中的对象序列化 (转载)
.NET 中的对象序列化 Piet Obermeyer Microsoft Corporation 2001 年 8 月 摘要:为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便 ...
- Java I/O中的对象序列化
Java I/O中的对象序列化 Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象.利用对象的序列化,可以实现轻量级持久性 ...
- Java中的对象序列化操作
文章目录 1 Java中的对象序列化操作 1 Java中的对象序列化操作 首先看一下对象序列化的操作步骤: 创建一个类,继承Serializable接口 创建对象 将对象写入文件 从文件读取对象信息 ...
- 【译】Java中的对象序列化
前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...
- python marshal loads failed_Python模块学习:marshal 对象的序列化
有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上.Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle ...
- python json.loads()中文问题-python中文编码json中文输出问题
python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 un ...
- 利用python获取指定url在ATS中缓存对象的信息
业务需求 给定url,如何查询指定的ATS中是否有该url的缓存对象信息?如果缓存了的话,希望提供该缓存对象的大小,缓存时间,缓存文件名,缓存份数(document alternative)等等信息 ...
- python用于导入模块或模块中的对象_在 Python 中导入模块中的对象有哪几种方式? (5.0分)_学小易找答案...
[判断题]尽管可以使用 import 语句一次导入任意多个标准库或扩展库,但是仍建议每次只导入一个标准库或扩展库. (2.0分) [填空题]表达式 int(str(34)) == 34 的值为 ___ ...
- python封装函数、实现将任意的对象序列化到磁盘上_Python系列之lambda、函数、序列化...
lambda 在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python la ...
最新文章
- 深度剖析不一样的Redis架构设计!
- python的编程模式-实例讲解Python设计模式编程之工厂方法模式的使用
- shell 脚本编写 if else then
- Zookeeper的默认选举
- 显式Intent 和隐式 Intent 的区别
- mysql完全备份 二进制日志_MySQL完全备份脚本:数据+二进制日志+备份日志
- 【渝粤教育】电大中专建筑施工组织 (2)作业 题库
- lisp取消选集选中状态_为什么对话框创建后是隐藏状态的
- Java学习笔记(六)数据的操作(增、删、改的操作)
- 《算法竞赛入门经典》————竖式问题
- IMX6ULL操作记录
- android文件管理器,10款优秀的Android文件管理器
- 实验一 Matlab语音处理基本指令
- Java程序员培训班有用吗?是否专业
- 基于CANdelaStudio制作CDD流程概述
- UE4 角色添加武器后 移动出现漂移
- pytho sockt编程
- 点阵LCD的显示原理
- java代码获取银行实时汇率
- Linux进程与线程