Python数据持久化 Marshal模块

Python数据持久化 Marshal模块

Python标准库中marshal模块的对象序列化功能类似于pickle模块。然而,这个模块并不用于一般用途的数据。另一方面,它被Python本身用于Python的内部对象序列化,以支持对Python模块的编译版本(.pyc文件)的读写操作。

marshal 模块使用的数据格式在不同的 Python 版本中是不兼容的。因此,一个版本的 Python 编译脚本 (.pyc 文件) 很可能在另一个版本上无法执行。

就像 pickle 模块一样,marshal 模块也定义了 load() 和 dump() 函数,用于从文件读写 marshalled 对象。

dump()

这个函数将支持的 Python 对象的字节表示法写到一个文件中。该文件本身是一个具有写入权限的二进制文件。

load()

这个函数从二进制文件中读取字节数据并将其转换为Python对象。

下面的例子演示了使用dump()和load()函数来处理Python的代码对象,它被用来存储预编译的Python模块。

该代码使用内置的 compile() 函数从嵌入Python指令的源字符串中建立一个代码对象。

compile(source, file, mode)

文件参数应该是读取代码的文件。如果不是从文件中读出的,则传递任意的字符串。

模式参数是 “exec”,如果源码包含一连串的语句,”eval”,如果有一个单一的表达式,或者 “single”,如果它包含一个单一的交互语句。

然后使用dump()函数将编译后的代码对象存储在一个.pyc文件中。

import marshal
script = """
a=10
b=20
print ('addition=',a+b)
"""
code = compile(script, "script", "exec")
f=open("a.pyc","wb")
marshal.dump(code, f)
f.close()

使用load()函数来反序列化.pyc文件中的对象。因为它返回一个代码对象,所以可以使用exec(),另一个内置函数来运行。

import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程