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

    序列化:
    数据类型转换成一个字符串数据类型
    反序列化:
    字符串数据类型转换为数据类型
    三个模块可以实现:json pickle shelve
    json是所有语言通用的,但仅能转换列表、字典、数字、字符串和元祖:
    dumps:数据类型转换成字符串数据类型
    loads:字符串数据类型转换成数据类型
    import json
    lis = ['aike','demo','cool','onedd']
    lis1 = json.dumps(lis)
    print(lis1,type(lis1))#字符串类型
    lis2 = json.loads(lis1)
    print(lis2,type(lis2))#列表
    
    #打印:
    ["aike", "demo", "cool", "onedd"] <class 'str'>
    ['aike', 'demo', 'cool', 'onedd'] <class 'list'>

    dump:数据类型转换成字符串数据类型后转入文件
    lis = ['aike1','demo','cool','onedd']
    with open('fifl','w',encoding='utf-8') as f:
        json.dump(lis,f)#无返回值,已经写入到文件
    load:将文件中的数据类型转换成字符串数据类型,不改变原文件内容
    f1 = open('fifl','r',encoding='utf-8')
    ret = json.load(f1)
    print(type(ret),ret)#列表
    f1.close()
    
    #打印:
    <class 'list'> ['aike1', 'demo', 'cool', 'onedd']
    json当中,dump和load只能一行一行写入或读取,所以可以利用dumps、loads和文件循环的方式写入或读取.
    lis = [{'aike':1},{'demo':2},{'cool':3},{'onedd':4}]
    for i in lis:
        dic = json.dumps(i)#逐个序列化
        with open('fi','a',encoding='utf-8') as f:
            f.write(dic+'
    ')#将序列化的字典主动写入文件,一个字典一行
    lis = []
    with open('fi','r',encoding='utf-8') as f:
        for line in f:
           lis.append(json.loads(line.strip()))#逐个将反序列化的字典加入到列表中
    print(lis)
    
    #打印:
    [{'aike': 1}, {'demo': 2}, {'cool': 3}, {'onedd': 4}]

    pickle
    是python用的,支持python当中的所有数据类型,用法与json一样
    import pickle
    lis = ['aike','demo','cool','onedd']
    ret = pickle.dumps(lis) #返回的是bytes数据类型的内容
    print(ret,type(ret))
    ret1 = pickle.loads(ret)
    print(ret1)
    
    #打印:
    b'x80x03]qx00(Xx04x00x00x00aikeqx01Xx04x00x00x00demoqx02Xx04x00x00x00coolqx03Xx05x00x00x00oneddqx04e.' <class 'bytes'>
    ['aike', 'demo', 'cool', 'onedd']
    但序列化后返回的bytes数据类型,所以文件操作需要使用wb,rb模式,切拥有记忆,能够写多条数据,能够取对应的多条数据
    lis = ['aike','demo','cool','onedd']
    lis2 = ['aike2','demo2','cool2','onedd2']
    with open('fixx','wb') as f:
        ret3 = pickle.dump(lis,f) #能够写多条数据
        ret4 = pickle.dump(lis2,f)
    with open('fixx','rb') as f:
        ret3 = pickle.load(f)
        ret4 = pickle.load(f) #能够取对应多条的数据
        print(ret3)
        print(ret4)
    
    #打印:
    ['aike', 'demo', 'cool', 'onedd']
    ['aike2', 'demo2', 'cool2', 'onedd2']

    shelve
    是通过序列化句柄操作的
    import shelve
    f = shelve.open('she')
    f['key'] = {'aike':1},{'demo':2},{'cool':3},{'onedd':4} #直接通过文件句柄存入数据
    f.close()
    
    f = shelve.open('she')
    ret = f['key'] #直接通过‘key’就可以直接读取文件,若‘key’不存在会报错
    print(ret)


  • 相关阅读:
    关于雷达(Radar)信道
    关于High CPU及基本排查
    UCS内存问题排查
    ASA-ACL类型
    思科室外AP无法注册到WLC
    WLC-Right to Use Licensing
    无线连接网络-FAST SSID Change
    ASA升级
    ASA密码恢复流程
    Mobility Express部署外部镜像服务器
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11430970.html
Copyright © 2011-2022 走看看