该模块包含可以以二进制格式读取和写入Python值的函数。该格式是针对Python的,但与机器体系结构问题无关(例如,您可以将Python值写入PC上的文件,将文件传输到Sun,然后再读回到那里)。该格式的细节是故意没有记录的; 它可能会在Python版本之间改变(尽管它很少)。[1]
这不是一个通用的“持久性”模块。对于通过RPC调用的Python对象的一般持久性和传输,请参阅模块pickle和shelve。该marshal模块主要用于支持读取和编写.pyc文件的Python模块的“伪编译”代码。因此,如果需要,Python维护者保留修改编组格式的权利,这些编码格式采用后向不兼容的方式。如果你正在序列化和反序列化Python对象,可以使用pickle模块 - 性能可比,版本独立性得到保证,并且pickle支持比marshal更广泛的对象。
警告
该marshal模块并非旨在防止错误或恶意构建的数据。切勿解组从不受信任或未经身份验证的源收到的数据。
并非所有的Python对象都支持; 一般来说,只有对象的值独立于特定的Python调用才能被该模块写入和读取。支持以下类型:布尔值,整数,长整数,浮点数,复数,字符串,Unicode对象,元组,列表,集合,frozensets,字典和代码对象,其中应该理解元组,列表,集合frozensets和词典只有在其中包含的价值本身得到支持的情况下才受到支持; 并且递归列表,集合和字典不应该被写入(它们将导致无限循环)。在单身None,Ellipsis并且StopIteration还可以编组和解组。
警告
在C long int类型超过32位的机器上(例如DEC Alpha),可以创建比32位更长的纯Python整数。如果在C long int类型只有32位的机器上将这样一个整数编组并读回,则会返回一个Python长整型对象。虽然类型不同,但数值相同。(这种行为在Python 2.2中是新的,在早期版本中,除了最不重要的32位数据都丢失了,并且打印了警告消息。)
有读取/写入文件的功能以及对字符串进行操作的功能。
该模块定义了这些功能:
marshal.dump(value, file[, version])
在打开的文件上写入值。该值必须是受支持的类型。该文件必须是打开的文件对象,例如sys.stdout或由open()或返回os.popen()。它可能不是Windows上的TemporaryFile等封装器。它必须以二进制模式('wb'或'w+b')打开。
如果该值具有(或包含具有)不受支持类型的对象,ValueError则会引发异常 - 但垃圾数据也会写入该文件。该对象不会被正确地读回load()。
版本2.4中的新增功能:version参数指示dump应使用的数据格式(请参见下文)。
marshal.load(file)
从打开的文件中读取一个值并返回。如果没有有效的读取值(例如,因为数据有不同的Python版本的不兼容元帅格式),提高EOFError,ValueError或TypeError。该文件必须是以二进制模式('rb'或'r+b')打开的打开的文件对象。
注释
如果包含不受支持的类型的对象被编组dump(),load()将替代None解组类型。
marshal.dumps(value[, version])
返回将被写入文件的字符串dump(value, file)。该值必须是受支持的类型。养ValueError异常,如果值具有(或包含具有的对象)不支持的类型。
版本2.4中的新增功能:version参数指示dumps应使用的数据格式(请参见下文)。
marshal.loads(string)
将字符串转换为值。如果没有找到有效的价值,提高EOFError,ValueError或TypeError。字符串中的额外字符将被忽略。
另外,定义了以下常量:
marshal.version
指示模块使用的格式。版本0是历史版本,版本1(在Python 2.4中添加)共享实际字符串,版本2(在Python 2.5中添加)使用二进制格式作为浮点数。当前版本是2。
2.4版本中的新功能。
网站建设开发|APP设计开发|小程序建设开发