python数据序列化与存储(pickle)

一 pickle

pickle模块用来实现python对象的序列化和反序列化。通常地pickle将python对象序列化为二进制流或文件。

python对象与文件之间的序列化和反序列化:* pickle.dump()* pickle.load()如果要实现python对象和字符串间的序列化和反序列化,则使用:* pickle.dumps()* pickle.loads()

可以被序列化的类型有:* None,True 和 False;* 整数,浮点数,复数;* 字符串,字节流,字节数组;* 包含可pickle对象的tuples,lists,sets和dictionaries;* 定义在module顶层的函数:* 定义在module顶层的内置函数;* 定义在module顶层的类;* 拥有__dict__()或__setstate__()的自定义类型;

注意:对于函数或类的序列化是以名字来识别的,所以需要import相应的module。

二 pickle的运行过程

在大部分情况下,要是的对象picklable,我们不需要额外的代码。默认地pickle将智能地检查类和实例的属性,当一个类实例反序列化的时候,它的__init__()方法通常不被调用。而是首先创建一个未初始化的实例,然后再回复存储的属性。

但是可以通过实现下列的方法来修改默认的行为:object.__getstate__() :默认地序列化对象的__dict__,但是如果你实现了__getstate__(),则__getstate__()函数返回的值将被序列化。object.__setstate__(state) :如果类型实现了此方法,则在反序列化的时候,此方法用来恢复对象的属性。object.__getnewargs__() : 如果实例构造的时候(__new__())需要参数,则需要实现此函数。注意:如果__getstate__()返回False,则在反序列化的时候__setstate__()则不被调用。

有的时候为了效率,或上面的3个函数不能满足需求时,需要实现__reduce__()函数。

[…]

仿佛松树就是一位威风的将军,守护着国家的国民。

python数据序列化与存储(pickle)

相关文章:

你感兴趣的文章:

标签云: