跳转到主要内容

支持自定义类的多个序列化格式的通用API

项目描述

Latest Version License Python Versions CI LINTER Coverage

Serialize: 多个序列化格式的通用Python API

There are multiple serialization formats out there ...
    ... and great packages to use them.

但是它们都有不同的API,并且在这些之间切换并不像应该的那样简单。Serialize可以帮助您做到这一点,包括处理自定义类。让我们使用pickle格式来导出一个字典

>>> from serialize import dumps, loads
>>> dumps(dict(answer=42), fmt='pickle')
b'\x80\x03}q\x00X\x06\x00\x00\x00answerq\x01K*s.'
>>> loads(_, fmt='pickle')
{'answer': 42}

这里有个酷点,您可以只需更改序列化格式而无需学习新的API。现在让我们使用msgpack来导出它

>>> dumps(dict(answer=42), fmt='msgpack')
b'\x81\xa6answer*'
>>> loads(_, fmt='msgpack')
{'answer': 42}

Serialize目前支持8种不同的格式:bsondilljson(内置或使用simplejson包)、msgpackphpserializepickleserpentyaml。Serialize没有实现这些格式,而是依赖于已经建立和经过良好测试的包。如果它们已安装,serialize将使用它们。

** Serialize allows you to use them all with the same API! **

您还可以使用dumpload直接写入文件对象

>>> from serialize import dump, load
>>> with open('output.yaml', 'wb') as fp:
...     dump(dict(answer=42), fp, fmt='yaml')
>>> with open('output.yaml', 'rb') as fp:
...     load(fp, fmt='yaml')
{'answer': 42}

或直接使用文件名,格式将被推断

>>> dump(dict(answer=42), 'output.yaml')
>>> load('output.yaml')
{'answer': 42}

一个非常常见的用例是从自定义类(如)中导出和加载对象

>>> class User:
...     def __init__(self, name, age):
...         self.name = name
...         self.age = age
...
>>> john = User('John Smith', 27)

但是一些序列化包不支持这个重要功能,其余的通常在它们之间有非常不同的API。Serialize为您提供了对这个的共同、简单的接口。您只需要定义一个函数,该函数能够将对象转换为内置类型的实例,反之亦然

>>> from serialize import register_class
>>> def user_to_builtin(u):
...     return (u.name, u.age)
...
>>> def user_from_builtin(c):
...     return User(c[0], c[1])
...

>>> register_class(User, user_to_builtin, user_from_builtin)

就这样。您可以直接使用它,无需任何麻烦

>>> dumps(john, fmt='bson')
b"y\x00\x00\x00\x03__bson_follow__\x00c\x00\x00\x00\x04__dumped_obj__
\x00\x1e\x00\x00\x00\x020\x00\x0b\x00\x00\x00John Smith\x00\x101\x00
\x1b\x00\x00\x00\x00\x02__class_name__\x00\x1c\x00\x00\x00<class '__m
ain__.Username'>\x00\x00\x00"
>>> v = loads(_, fmt='bson')
>>> v.name
'John Smith'
>>> v.age
27

享受吧!

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码发行版

Serialize-0.2.1.tar.gz (14.7 kB 查看哈希值)

上传时间 源代码

由以下机构支持