美文网首页Python自动化运维
pickle- Python对象序列化

pickle- Python对象序列化

作者: 巧生于缘 | 来源:发表于2018-03-14 11:34 被阅读8次

    pickle模块实现Python对象结构的二进制协议序列化和反序列化。pickling将Python对象层次结构转换为字节流的过程。unpickling是相反操作,将字节流(二进制文件类似字节的对象)转换回对象层次结构。

    pickle与Python其他模块关系

    marshal

    • marshal模块主要是为了支持Python的.pyc文件
    • pickle跟踪已经序列化的对象,不会对同一对象再次序列化
    • marshal不能用于序列化用户定义的类以及实例。pickle可以透明的保存和恢复类实例,但类定义必须可导入,且与存储对象位于同一模块
    • marshal序列化格式不能保证整个Python版本的移植。pickle序列化格式是保证不同Python版本向后兼容。

    json

    • json是文本的序列化格式(输出unicode文本);pickle是二进制序列化格式
    • json可读;pickle不可
    • json在Python之外可互操作;pickle是Python特有的
    • json只能表示Python内置类型的一个子集,并且不包含自定义类; pickle可以代表大量的Python类型

    模块接口

    (1) pickle.dump(obj,file,protocol = None,*,fix_imports = True )
    函数的功能:将obj对象序列化存入已经打开的file中。

    • obj:想要序列化的obj对象。
    • file:文件名称。
    • protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。

    (2) pickle.dumps(obj,protocol = None,* ,fix_imports = True )
    函数的功能:将obj对象序列作为bytes对象返回,而不是存入文件中。
    (3) pickle.load(file,* ,fix_imports = True,encoding =“ASCII”,errors =“strict” )
    函数的功能:将file中的对象序列化读出。
    (4) pickle.loads(bytes_object,*,fix_imports = True,encoding =“ASCII”,errors =“strict” )
    函数的功能:从bytes对象中读出序列化前的obj对象。

    import pickle
    list = [1,  2, 3, '123', {'key':100}]
     
    dict = { 'x': [1, 2, 3, 4],  
             'y': ('a', 'b'),  
             'z': {'key':'var'}} 
    
    with open('dataFile.txt', 'wb') as fw:
        pickle.dump(list, fw)
        pickle.dump(dict, fw)
    
    with open('dataFile.txt', 'rb') as fr:
        data1 = pickle.load(fr)
        print(data1)
        data2 = pickle.load(fr)
        print(data2)
    
    p = pickle.dumps(list)  
    print( pickle.loads(p) )  
    p = pickle.dumps(dict))  
    print( pickle.loads(p) )
    

    相关文章

      网友评论

        本文标题:pickle- Python对象序列化

        本文链接:https://www.haomeiwen.com/subject/yzgxqftx.html