支持自定义类的多个序列化格式的通用API
项目描述
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种不同的格式:bson、dill、json(内置或使用simplejson包)、msgpack、phpserialize、pickle、serpent和yaml。Serialize没有实现这些格式,而是依赖于已经建立和经过良好测试的包。如果它们已安装,serialize将使用它们。
** Serialize allows you to use them all with the same API! **
您还可以使用dump和load直接写入文件对象
>>> 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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6610e0f513e87a76dd05947bedb3c85b7cc51bbd78f7775696ea4f55d9112dd |
|
MD5 | 2eb781fa8f1715b5bb71b931162518d8 |
|
BLAKE2b-256 | 9162d0fe3397a276e2586836c52e9c3eadc1bfd1a0641361cd7365bbe6dd612f |