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

    1.什么是序列化模块

    答:json模块用于字符串和Python数据类型间进行转换

    2.:json的四个功能:分别是dumps、dump、loads、load

      2.1:dumps:将列表,字典,元组,数字-->字符串

      dumps直接操作变量,操作完成变成了一个字符串变量;

    dic = {'key':'wlan','key2':'vlan','key3':'wvlan'}
    import json
    ret=json.dumps(dic)将字典转换成字符串
    print(dic,type(dic))
    print(ret,type(ret))
    #{'key': 'wlan', 'key2': 'vlan', 'key3': 'wvlan'} <class 'dict'>
    #{"key": "wlan", "key2": "vlan", "key3": "wvlan"} <class 'str'>
    ****注意转换完后是字符串表示""

      2.2loads反序列化: 将字符串转换成之前对应的数据类型  字符串-->字典   用什么转换就用什么转回去.字典转字符串转回去还是字典

    res =json.loads(ret)  #字符串转化成字典
    print(res,type(res))
    #结果:{'key': 'wlan', 'key2': 'vlan', 'key3': 'wvlan'} <class 'dict'>

      2.3 这个结果会使1变成 字符串'1'

    dic = {1 : [1,2,3],2 : (4,5,'aa')}
    ret = json.dumps(dic)  # 序列化
    print(dic,type(dic))
    print(ret,type(ret))
    
    res = json.loads(ret) # 反序列化
    print(res,type(res))
    #结果

    #{1: [1, 2, 3], 2: (4, 5, 'aa')} <class 'dict'>
    #{"1": [1, 2, 3], "2": [4, 5, "aa"]} <class 'str'>
    #{'1': [1, 2, 3], '2': [4, 5, 'aa']} <class 'dict'

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

    # 后端语言 java c c++ c#
    # 前端语言 在网页上展示
    # 向文件记录字典
    import  json
     dic = {'key':'wlan','key2':'vlan','key3':'wvlan'}
     ret = json.dumps(dic)
     with open('json_file','a')as f:
         f.write(ret)
    #从文件中读取字典
    with open('json_file','r')as f:
        str_dic=f.read()
    dic=json.loads(str_dic)
    print(dic)
    不可连续取值

    需求 :就是想要把一个一个的字典放到文件中,再一个一个取出来
    ic = {'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必须是字符串
    data = {'username':['李华','二愣子'],'sex':'male','age':16}
    json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
    print(json_dic2)
    #当你的字典特别长或则特别大的时候就会写不下,所以这时会用到它的参数调整你输出的格式
    #sort_keys:对字典的key值进行了排序,
    #ident表示每一行的缩进
    #separate表示分隔符,
    
    这种格式一般不在存文件时应用该方法,只是让程序员看起来方便,因为相对浪费空间;

    pickle模块

    a:和json模块一样,同样也是将数据类型转为字符串

    b:pickle可以将任何数据类型转为字符串;

    c:pickele是以bytes格式显示的;

    d:pickle的dumps和loads,dump和load跟json一样

    e:不同点是pickle可以对对象操作,转为字符串

    复制代码
    import pickle
    class A:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def read(self):
            print(222)
    a = A('name',10)
    with open('aaa',mode = 'wb')as f:
        pickle.dump(a,f)
    with open('aaa','rb')as f1:
        ret = pickle.load(f1)
        print(ret.__dict__)
        ret.read()
    #可用于对游戏的存档和读档
    复制代码

    #pickle的应用,将对象一一提取出来,用一个异常处理

    复制代码
    import pickle
    class A:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def read(self):
            print(222)
    a = A('name1',10)
    b = A('name2',15)
    c = A('name3',18)
    with open('aaa',mode = 'wb')as f:
        pickle.dump(a,f)
        pickle.dump(b,f)
        pickle.dump(c,f)
    with open('aaa','rb')as f1:
        while True:
            choose = True
            try:
                obj = pickle.load(f1)
                if 'name5' == obj.name:
                    print(obj.__dict__)
                    break
            except EOFError:
                choose = False
                break
    if choose == False:        #如果没有此对象,给一个提示
        print('None')
    #输出结果:
    None
    复制代码

    这样就可以将对象的属性一一保存起来,等到用到的时候再提取出来

  • 相关阅读:
    handsontable-developer guide-data binding,data sources
    Android版Web服务器实现(三)HTTP响应
    Android版Web服务器实现(二)使用服务来监听HTTP请求
    HTTP协议详解(很详细)
    Android版Web服务器实现(一)HTTP协议请求头解析
    HTTP协议中Content-Length的详细解读。
    Android基于SwiFTP开源库的FTP实现(FTP匿名登录)
    Android之查看Wifi密码
    道德经与抽象、接口及框架
    JAVA中利用JNI与VS2012实现C/C++的DLL调用
  • 原文地址:https://www.cnblogs.com/LW-LW-LW/p/9513084.html
Copyright © 2011-2022 走看看