zoukankan      html  css  js  c++  java
  • pickle与json模块

    1.什么是序列化&反序列化

    把内存中的数据类型转换成一个特定的格式内容,该格式的内容可用于存储或者传输给其他平台使用

    #   内存中的数据类型---->序列化---->特定的格式(json格式或者pickle格式)
    #   内存中的数据类型<----反序列化<----特定的格式(json格式或者pickle格式)
    
    #   土办法:
    #   {'aaa':111}--->序列化str({'aaa':111})----->"{'aaa':111}"
    #   {'aaa':111}<---反序列化eval("{'aaa':111}")<-----"{'aaa':111}"
    

    2.为何要序列化

    #   序列化得到结果=>特定的格式的内容有两种用途
    #   1、可用于存储=》用于存档
    #   2、传输给其他平台使用=》跨平台数据交互
    #        python                 java
    #         列表     特定的格式      数组
    
    #   强调:
    #       针对用途1的特定一格式:可是一种专用的格式=》pickle只有python可以识别
    #       针对用途2的特定一格式:应该是一种通用、能够被所有语言识别的格式=》json
    

    3.如何使用序列化与反序列化

    # 示范1
    import json
    # # 序列化
    json_res=json.dumps([1,'aaa',True,False])
    print(json_res,type(json_res)) # "[1, "aaa", true, false]"
    
    # # 反序列化
    l=json.loads(json_res)
    print(l,type(l))  
    
    # 示范2:
    import json
    # 序列化的结果写入文件的复杂方法
    # json_res=json.dumps([1,'aaa',True,False])
    # # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
    # with open('test.json',mode='wt',encoding='utf-8') as f:
    #     f.write(json_res)
    
    # 将序列化的结果写入文件的简单方法
    # with open('test.json',mode='wt',encoding='utf-8') as f:
    #     json.dump([1,'aaa',True,False],f)
    
    
    # 从文件读取json格式的字符串进行反序列化操作的复杂方法
    # with open('test.json',mode='rt',encoding='utf-8') as f:
    #     json_res=f.read()
    #     l=json.loads(json_res)
    #     print(l,type(l))
    
    # 从文件读取json格式的字符串进行反序列化操作的简单方法
    # with open('test.json',mode='rt',encoding='utf-8') as f:
    #     l=json.load(f)
    #     print(l,type(l))
    
    # json验证: json格式兼容的是所有语言通用的数据类型,不能识别某一语言的所独有的类型
    # json.dumps({1,2,3,4,5})
    
    # json强调:一定要搞清楚json格式,不要与python混淆
    # l=json.loads('[1, "aaa", true, false]')
    # l=json.loads("[1,1.3,true,'aaa', true, false]")
    # print(l[0])
    
    在python解释器2.7与3.6之后都可以json.loads(bytes类型),但唯独3.5不可以
    # res=json.dumps({'name':'哈哈哈'})
    # print(res,type(res))
    
    # res=json.loads('{"name": "u54c8u54c8u54c8"}')
    # print(res,type(res))
    

    4、猴子补丁

    在入口处打猴子补丁

    # import json
    # import ujson
    #
    # def monkey_patch_json():
    #     json.__name__ = 'ujson'
    #     json.dumps = ujson.dumps
    #     json.loads = ujson.loads
    #
    # monkey_patch_json() # 在入口文件出运行
    

    5.pickle模块

    import pickle
    # res=pickle.dumps({1,2,3,4,5})
    # print(res,type(res))
    
    # s=pickle.loads(res)
    # print(s,type(s))
    
    # python2与python3的pickle兼容性问题
    # coding:utf-8
    import pickle
    
    with open('a.pkl',mode='wb') as f:
        # 一:在python3中执行的序列化操作如何兼容python2
        # python2不支持protocol>2,默认python3中protocol=4
        # 所以在python3中dump操作应该指定protocol=2
        pickle.dump('你好啊',f,protocol=2)
    
    with open('a.pkl', mode='rb') as f:
        # 二:python2中反序列化才能正常使用
        res=pickle.load(f)
        print(res)
    
  • 相关阅读:
    UVA11367 Full Tank?
    不均衡样本集问题
    NLP interview
    Linux 指令
    Python 趣题
    Grid Illumination
    动态规划-Minimum Cost to Merge Stones
    Contest 141
    Python join()方法
    Single Number
  • 原文地址:https://www.cnblogs.com/chenyoupan/p/12606120.html
Copyright © 2011-2022 走看看