zoukankan      html  css  js  c++  java
  • 序列化模块

    一.序列化模块

    序列化 : 字符串 bytes
    序列 : 列表 元组 字符串 bytes

    把其他的数据类型 转换成 字符串 bytes 序列化的过程

    json

    复制代码
    import json
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
    print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
    #注意,json转换完的字符串类型的字典中的字符串是由""表示的
    
    dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
    #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
    print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
    
    
    list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
    str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 
    print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
    list_dic2 = json.loads(str_dic)
    print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
    
    loads和dumps
    复制代码

      load和dump

    复制代码
    import json
    f = open('json_file','w')
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
    f.close()
    
    f = open('json_file')
    dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
    f.close()
    print(type(dic2),dic2)
    复制代码

    json 在所有的语言之间都通用 : json序列化的数据 在python上序列化了 那在java中也可以反序列化
    能够处理的数据类型是非常有限的 : 字符串 列表 字典 数字
    字典中的key只能是字符串

     向文件中记录字典
    import json
    dic = {'key' : 'value','key2' : 'value2'}
    ret = json.dumps(dic)  # 序列化
    with open('json_file','a') as f:
        f.write(ret)

    从文件中读取字典

    import json
    with open('json_file','r') as f:
        str_dic = f.read()
    dic = json.loads(str_dic)
    print(dic.keys())

    dump load 是直接操作文件的

    复制代码
    import json
    dic = {'key1' : 'value1','key2' : 'value2'}
    with open('json_file','a') as f:
        json.dump(dic,f)
    with open('json_file','r') as f:
        dic = json.load(f)
    print(dic.keys())
    复制代码

    把一个一个的字典放到文件中,再一个一个取出来

    复制代码
    import json
    dic = {'key1' : 'value1','key2' : 'value2'}
    with open('json_file','a') as f:
        str_dic = json.dumps(dic)
        f.write(str_dic+'
    ')
        str_dic = json.dumps(dic)
        f.write(str_dic + '
    ')
        str_dic = json.dumps(dic)
        f.write(str_dic + '
    ')

    with open('json_file','r') as f: for line in f: dic = json.loads(line.strip()) print(dic.keys())
    复制代码

    json
    dumps loads
    在内存中做数据转换 :
    dumps 数据类型 转成 字符串 序列化
    loads 字符串 转成 数据类型 反序列化
    dump load
    直接将数据类型写入文件,直接从文件中读出数据类型
    dump 数据类型 写入 文件 序列化
    load 文件 读出 数据类型 反序列化
    json是所有语言都通用的一种序列化格式
    只支持 列表 字典 字符串 数字
    字典的key必须是字符串

    json的格式化输出 
    import json
    data = {'username':['李华','二愣子'],'sex':'male','age':16}
    json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
    print(json_dic2)

      pickle

    1. 支持在python中几乎所有的数据类型

    import pickle
    dic = {(1,2,3):{'a','b'},1:'abc'}
    ret = pickle.dumps(dic)
    print(ret)

    2. dumps 序列化的结果只能是字节

     print(pickle.loads(ret))

    3.只能在python中使用
    4.在和文件操作的时候,需要用rb wb的模式打开文件
    5.可以多次dump 和 多次load

  • 相关阅读:
    超详细从零记录Hadoop2.7.3完全分布式集群部署过程
    hadoop学习之hadoop完全分布式集群安装
    Fine-tune with Pretrained Models
    Module
    Symbol API
    Gluon parameters 和 Blocks 命名
    mxnet 数据读取
    Adversarial Latent Autoencoders
    A New Meta-Baseline for Few-Shot Learning
    Deploy a plain HTTP registry
  • 原文地址:https://www.cnblogs.com/RootEvils/p/9513750.html
Copyright © 2011-2022 走看看