Python pickle类库介绍(对象序列化和反序列化)
一、pickle pickle模块用来实现python对象的序列化和反序列化。通常地pickle将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__()函数。 三、实例 复制代码 代码如下: import pickle # An arbitrary collection of objects supported by pickle. with open('data.pickle','wb') as f: 四、修改picklable类型的默认行为 复制代码 代码如下: class TextReader: """Print and number lines in a text file.""" def __init__(self,filename): def readline(self): def __getstate__(self): def __setstate__(self,state): # the output is (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |