zoukankan      html  css  js  c++  java
  • 序列化模块--json模块--pickle模块-shelve模块

    什么叫序列化?

    序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传播到远程,因为硬盘或网络传输时只能接受bytes

    例:
    把内存数据 转成字符

    # data ={
    # 'roles':[
    # {'role':'monster','type':'pip','life':50},
    # {'role':'hero','type':'关羽','life':80}
    # ]
    # }
    #
    # f = open("game_status",'w')
    # f.write(str(data))

    例:把字符转成 内存数据

    f=open("game_status",'r')
    d =f.read()
    d =eval(d) #eval能把字符串转化成各种数据类型
    print(d['roles'])
    '''把内存数据 转成字符,叫序列化
    把字符转成 内存数据 叫反序列化'''

    json 模块
    # import json
    # data ={
    # 'roles':[
    # {'role':'monster','type':'pip','life':50},
    # {'role':'hero','type':'关羽','life':80}
    # ]
    # }
    # d = json.dumps(data) #.dumps是将数据转成字符串
    # print(d,type(d))
    # f = open("test.json","w")
    # json.dump(data,f) #dump直接转成字符串,并写入文件

    # d = json.dumps(data) #将数据转成字符串
    # d2 = json.loads(d) #加载字符串,并转成字典赋值给d2
    # print(d2['roles']) #打印字典d2['roles']

    # f = open("test.json","r") #打开文件test.json
    # data =json.load(f) #加载字符串f并转成字典,赋值 data
    # print(data['roles'],type(data))

    '''只是把数据类型转成字符串存到内存里的意义?
    json.dumps json.loads
    1、把你的内存数据 通过网络 共享给远程其它人
    2、字义了不同语言的之前的交互规则
    1、纯文本,坏处,不能共享复杂的数据类型
    2、xml,坏处,占空间大
    3、json,简单,可读性好'''

    import json
    例:
    # import json
    # data ={
    # 'roles':[
    # {'role':'monster','type':'pip','life':50},
    # {'role':'hero','type':'关羽','life':80}
    # ]
    # }
    # d = json.dumps(data) #.dumps是将数据转成字符串
    # print(d,type(d))
    # f = open("test.json","w")
    # json.dump(data,f) #dump直接转成字符串,并写入文件

    # d = json.dumps(data) #将数据转成字符串
    # d2 = json.loads(d) #加载字符串,并转成字典赋值给d2
    # print(d2['roles']) #打印字典d2['roles']

    # f = open("test.json","r") #打开文件test.json
    # data =json.load(f) #加载字符串f并转成字典,赋值 data
    # print(data['roles'],type(data))

    '''只是把数据类型转成字符串存到内存里的意义?
    json.dumps json.loads
    1、把你的内存数据 通过网络 共享给远程其它人
    2、字义了不同语言的之前的交互规则
    1、纯文本,坏处,不能共享复杂的数据类型
    2、xml,坏处,占空间大
    3、json,简单,可读性好'''

    import json
    # import json
    # data ={
    # 'roles':[
    # {'role':'monster','type':'pip','life':50},
    # {'role':'hero','type':'关羽','life':80}
    # ]
    # }
    # d = json.dumps(data) #.dumps是将数据转成字符串
    # print(d,type(d))
    # f = open("test.json","w")
    # json.dump(data,f) #dump直接转成字符串,并写入文件
    # d = json.dumps(data)  #将数据转成字符串
    # d2 = json.loads(d) #加载字符串,并转成字典赋值给d2
    # print(d2['roles']) #打印字典d2['roles']

    # f = open("test.json","r") #打开文件test.json
    # data =json.load(f) #加载字符串f并转成字典,赋值 data
    # print(data['roles'],type(data))

    '''只是把数据类型转成字符串存到内存里的意义?
    json.dumps json.loads
    1、把你的内存数据 通过网络 共享给远程其它人
    2、字义了不同语言的之前的交互规则
    1、纯文本,坏处,不能共享复杂的数据类型
    2、xml,坏处,占空间大
    3、json,简单,可读性好'''

    import json
    # f =open("json_file",'w',encoding='utf-8')
    #
    # d={'name':'alex','age':22}
    # l=[1,2,3,4,'rain']
    # json.dump(d,f) #dump字典到文件
    # json.dump(l,f) #dump列表到文件,dump时没问题,但lodad时会报错。因为dump了多次不同类型的数据

    f =open("json_file",'r',encoding='utf-8')
    print(json.load(f)) #载入dump多次的不同数据类型会报错。

    Pickle模块
    import pickle
    # d ={'name':'alex','age':22}
    #
    # l =[1,2,3,4,'rain']
    # pk = open("data.pkl",'wb') #bytes,写入文件模式必须必成wb
    # pickle.dump(d,pk)

    f= open("data.pkl","rb")
    d =pickle.load(f)
    print(d)

    '''json支持的序列化类型
    str,int,tuple,list,dict
    pickle支持的序列化类型
    支持python里的所有的数据类型
    只能在python里使用'''

    shelve模块
    shelve支持所有的数据类型,只支持python,一般都用shelve模块,很少用pickle模块
    import shelve
    f = shelve.open('shelve_test') #打开一个文件

    names = ['alex','rain','test']
    info ={'name':'alex','age':22}

    f['names'] =names #持久化列表
    f['info_dic']=info

    f.close()
  • 相关阅读:
    跨域名登录态传递
    ECC公钥格式详解
    企业应用架构演化探讨:从微服务到Service Mesh
    阿里云宕机故障
    一个“三无管理者”的思考
    如何构建安全的微服务应用
    微服务架构实践
    Redis持久化之RDB
    Redis持久化persistence
    Redis 缓存失效和回收机制续
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/8447915.html
Copyright © 2011-2022 走看看