zoukankan      html  css  js  c++  java
  • python之序列化json模块与pickle模块(待补充)

    一.json是所有语言都通用的一种序列化格式

    只支持 : 列表,字典字符串,数字,且字典的key必须是字符串

    '''

    1. dumps , loads

        在内存中做数据转换:

        dumps : 数据类型 转成 字符串 ------序列化

        loads :  字符串 转成 数据类型------反序列化

    2. dump , load

        直接将数据类型写入文件,直接从文件中读出数据类型

         dump 数据类型 写入 文件 序列化
    load 文件 读出 数据类型 反序列化
    '''

    1、写操作.json文件dumps()、dump()函数
    d = {
        'zll': {
            'addr': '北京',
            'age': 28
        },
        'ljj': {
            'addr': '北京',
            'age': 38
        }
    }
    
    
    fw = open('user_info.json', 'w', encoding='utf-8')
    # ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似uXXXX的显示数据,设置成False后,就能正常显示
    # dic_json = json.dumps(d,ensure_ascii=False,indent=4)  #字典转成json格式,字典转成字符串
    dic_json = json.dumps(d, ensure_ascii=True, indent=4)  # 字典转成json格式,字典转成字符串
    fw.write(dic_json)
    fw.close()
    结果
    {
        "zll": {
            "addr": "u5317u4eac",
            "age": 28
        },
        "ljj": {
            "addr": "u5317u4eac",
            "age": 38
        }
    }
    fw = open('user_info.json', 'w', encoding='utf-8')
    # ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似uXXXX的显示数据,设置成False后,就能正常显示
    dic_json = json.dumps(d,ensure_ascii=False,indent=4)  #字典转成json,字典转成字符串
    fw.write(dic_json)
    fw.close()
    结果 
    {  9 "zll": { 10 "addr": "北京", 11 "age": 28 12  }, 13 "ljj": { 14 "addr": "北京", 15 "age": 38 16  } 17 }

    dump() 操作json文件 写的操作

    fw = open('user_info.json', 'w', encoding='utf-8')
    json.dump(d,fw,ensure_ascii=False,indent=4)  #操作文件
    fw.close()
    
    结果
    {
        "zll": {
            "addr": "北京",
            "age": 28
        },
        "ljj": {
            "addr": "北京",
            "age": 38
        }
    }

    2、读操作load()、loads()

    # json串是一个字符串
    f = open('product.json',encoding='utf-8')
    res = f.read()
    product_dic = json.loads(res)  #把json串,变成python的数据类型,只能转换json串内容
    print(product_dic)
    print(product_dic['iphone'])
    # t = json.load(f)
    # print(t) #传一个文件对象,它会帮你直接读json文件,并转换成python数据
    # print(t['iphone'])
    f.close()
    
    结果
    {'iphone': {'color': 'red', 'num': 1, 'price': 98.5}, 'wather': {'num': 100, 'price': 1, 'color': 'white'}}
    {'color': 'red', 'num': 1, 'price': 98.5}
    # 文件读写
    def op_file(file, dict_temp=None):
        if dict_temp:
            with open(file, 'w', encoding='utf-8') as fw:
                json.dump(dict_temp, fw, ensure_ascii=False, indent=4)
            return 1
        else:
            with open(file, 'r', encoding='utf-8') as fr:
                dict_temp = json.load(fr)
            return dict_temp

    二.pickle

    1. 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
    2. 由任何原生类型组成的列表,元组,字典和集合。
    3. 函数,类,类的实例
     

    pickle.dump(obj, file[, protocol])
      序列化对象,将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。

    
    

    ------------------------------------------
    pickle.load(file)
      反序列化对象。将文件中的数据解析为一个Python对象。

    
    

    其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错:

    # dumps功能
    import pickle
    data = ['aa', 'bb', 'cc']  
    # dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
    p_str = pickle.dumps(data)
    print(p_str)            
    b'x80x03]qx00(Xx02x00x00x00aaqx01Xx02x00x00x00bbqx02Xx02x00x00x00ccqx03e.
     # loads功能
     # loads  将pickle数据转换为python的数据结构
     mes = pickle.loads(p_str)
     print(mes)
     
    #['aa', 'bb', 'cc']
     # dump功能
     # dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
     with open('D:/tmp.pk', 'w') as f:
         pickle.dump(data, f)
     # load功能
     # load 从数据文件中读取数据,并转换为python的数据结构
     with open('D:/tmp.pk', 'r') as f:
         data = pickle.load(f)
    
    
  • 相关阅读:
    在进行页面的DIV CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对于该问题的解决方法也是“见机行事”。
    关于图片加载问题
    隐藏iframe边框
    设计模式-状态模式(State)
    软件设计原则
    设计模式-原型模式(Prototype)【重点:浅复制与深复制】
    设计模式-观察者模式(Observer)
    【Parallel】.Net 并行执行程序的使用心得
    个人对【依赖倒置(DIP)】、【控制反转(IOC)】、【依赖注入(DI)】浅显理解
    设计模式-建造者模式(Builder)
  • 原文地址:https://www.cnblogs.com/wxj1129549016/p/9518945.html
Copyright © 2011-2022 走看看