数据编组支持 — Python 文档
来自菜鸟教程
数据编组支持
这些例程允许 C 代码使用与 marshal 模块相同的数据格式处理序列化对象。 有将数据写入序列化格式的函数,以及可用于读回数据的附加函数。 用于存储编组数据的文件必须以二进制模式打开。
数值首先以最低有效字节存储。
该模块支持两种版本的数据格式:版本 0
是历史版本,版本 1
(Python 2.4 中的新功能)在文件中共享内部字符串,以及在解组时。 版本 2(Python 2.5 中的新功能)使用二进制格式表示浮点数。 Py_MARSHAL_VERSION 表示当前文件格式(当前为2)。
- void PyMarshal_WriteLongToFile(long value, FILE *file, int version)
将
long
整数 值 编组到 文件 。 这只会写入 value 的最低有效 32 位; 无论原生long
类型的大小如何。2.4版本变化:version表示文件格式。
- void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version)
将 Python 对象 value 编组到 file。
2.4版本变化:version表示文件格式。
- PyObject *PyMarshal_WriteObjectToString(PyObject *value, int version)
返回一个包含 value 的编组表示的字符串对象。
2.4版本变化:version表示文件格式。
以下函数允许读回编组的值。
XXX 错误检测呢? 似乎越过文件末尾读取将始终导致负数值(相关的地方),但尚不清楚在没有错误时是否不会正确处理负值。 正确的说法是什么? 是否应该只使用这些例程写入非负值?
- long PyMarshal_ReadLongFromFile(FILE *file)
- 从打开以供读取的
FILE*
中的数据流中返回一个 Clong
。 无论long
的本机大小如何,使用此函数只能读取 32 位值。
- int PyMarshal_ReadShortFromFile(FILE *file)
- 从打开以供读取的
FILE*
中的数据流中返回一个 Cshort
。 无论short
的本机大小如何,使用此函数只能读取 16 位值。
- PyObject *PyMarshal_ReadObjectFromFile(FILE *file)
- 从打开以供读取的
FILE*
中的数据流中返回 Python 对象。 出错时,设置适当的异常(EOFError
或TypeError
)并返回 NULL。
- PyObject *PyMarshal_ReadLastObjectFromFile(FILE *file)
- 从打开以供读取的
FILE*
中的数据流中返回 Python 对象。 与 PyMarshal_ReadObjectFromFile() 不同,此函数假定不会从文件中读取更多对象,从而允许它主动将文件数据加载到内存中,以便反序列化可以从内存中的数据进行操作,而不是读取从文件中一次一个字节。 仅当您确定不会从文件中读取任何其他内容时才使用这些变体。 出错时,设置适当的异常(EOFError
或TypeError
)并返回 NULL。
- PyObject *PyMarshal_ReadObjectFromString(char *string, Py_ssize_t len)
从包含 string 指向的 len 字节的字符缓冲区中的数据流返回 Python 对象。 出错时,设置适当的异常(
EOFError
或TypeError
)并返回 NULL。2.5 版更改: 此函数使用
int
类型用于 len。 这可能需要更改您的代码才能正确支持 64 位系统。