zoukankan      html  css  js  c++  java
  • 🍖pickle 模块

    引入

    Pickle是 Python特有的序列化模块, 它只能用于Python, 并且可能不同版本的Python彼此都不兼容,但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不行

    ps : 一般用Pickle保存那些不重要的数据,不能成功地反序列化也没关系

    一.序列化与反序列化介绍

    Pickle是Python的内置模块点我给你介绍

    二.Pickle的使用

    1.简单使用

    • pickle 将数据存成 Bytes 类型
    import pickle
    
    s = {1,2,3,4}
    print(pickle.dumps(s))
    # b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03K\x04e\x85q\x02Rq\x03.'
    
    b = b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03K\x04e\x85q\x02Rq\x03.'
    print(pickle.loads(b))
    # {1, 2, 3, 4}
    

    2.写入文件序列化与反序列化

    • 序列化 : .dumps()
    import pickle
    
    s = {1, 2, 3, 4, 5, }
    res = pickle.dumps(s)
    with open('db.pkl', 'wb', )as f:
        f.write(res)
    
    • 反序列化 : loads()
    with open('db.pkl', 'rb')as f:
        data = f.read()
        dic = pickle.loads(data)
        print(res,type(res))  # {1, 2, 3, 4, 5} <class 'set'>
    

    3.简单序列化与反序列化 (提供直接写入文件功能)

    • 序列化 : dump()
    import pickle
    
    s=[1,2,3,4,5]
    with open('db.pic','wb')as f:
        pickle.dump(s,f)
    
    • 反序列化 : load()
    with open('db.pic','rb')as f:
        res = pickle.load(f)
        print(res,type(res))  # [1, 2, 3, 4, 5] <class 'list'>
    

    三.Pickle 与 json 对比

    1.json 格式

    • 通用格式, 任何语言都支持, 并且都可以解析
    • 数据类型有限 : 字典, 列表, 布尔

    2.pickle 格式

    • 只适用于 Python, 序列化之后拿到的返回值是 Bytes 类型, 其他语言识别不了
    • 但可以支持 Python 中的任意类型

    3.两种格式序列化与反序列化对比

    import json
    import pickle
    
    dic = {'name' : 'shawn'}
    
    ⛅序列化
    jjj = json.dumps(dic)
    ppp = pickle.dumps(dic)
    print(jjj)  # {"name": "shawn"}
    print(ppp)  # b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00shawnq\x02s.'
    print(type(jjj))  # <class 'str'>
    print(type(ppp)   # <class 'bytes'>
          
    ⛅反序列化
    jjj2 = json.loads('{"name": "shawn"}')
    ppp2 = pickle.loads(b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00shawnq\x02s.')
    print(jjj2)  # {'name': 'shawn'}
    print(ppp2)  # {'name': 'shawn'}
    print(jjj2["name"],type(jjj2))  # shawn <class 'dict'>
    print(ppp2["name"],type(ppp2))  # shawn <class 'dict'>
    

    4.pickle 可序列化任意类型小示例

    import json
    import pickle
    
    dic = {'type' : input}
    res1 = json.dumps(dic)   # 报错 : TypeError
    res2 = pickle.dumps(dic) 
    print(res2)  # b'\x80\x03}q\x00X\x04\x00\x00\x00typeq\x01cbuiltins\ninput\nq\x02s.'
    
    pickle.loads(res2)["type"]()  # 反序列化加括号"()"出来可以直接使用"input"函数
    
  • 相关阅读:
    李彦宏:创业成功五招即可
    JS无聊之作——换肤切换样式
    从3个科技公司里学到的57条经验(转载)
    早该知道的7个JavaScript技巧
    ASP.NET Cookie 概述
    曝光SEO高手藏在内心的SEO秘籍
    18种最实用的网站推广方法大全
    javascript的IE和Firefox兼容性问题
    增加反向链接的35个技巧
    常用JS片段
  • 原文地址:https://www.cnblogs.com/songhaixing/p/14135937.html
Copyright © 2011-2022 走看看