• day23 序列化模块


    概念:
      序列化 -- 其他数据类型转换成一个字符串数据类型
      反序列化 -- 字符串转换成其他数据类型
      序列 -- 字符串

    必须要转换成字符串的场景:
      往文件里面写数据的时候只能写字符串,不能写字典的
      网络传输的时候只能传bytes,字典也不能直接转换成bytes

    可以用到的模块:
      json 非常重要的一个模块,非常非常
      通用的序列化格式,不仅仅是局限于python,优点就是很通用
      只有很少的一部分数据类型可以序列化,局限性比较大
      pickle 仅次于json
      所有的python的数据都可以序列化
      问题在于,pickle序列化的内容只有python可以理解
      而且,反序列化依赖代码本地存在,不存在则无法解析
      shelve python3 里面新加的,特点是好操作,但是实用性就一般
      有个序列化句柄,很方便使用读写直接操作
       新加的,存在一些小问题

    
    
    json '{""}' json  
      可转:
        数字 字符串 列表 字典 元祖
      不可转:
        集合
      特殊改变:  
        会将字符串改成双引号,字典里面的单引号就会改成双
      元祖的序列化会被变成列表,本身是元祖的序列后再反序列化便不会来元祖就变成列表了
      直接写内存里面的操作
      序列化方法:dumps
      反序列化方法:loads
    1 import json
    2 dic = {"k1":"v1"}
    3 print(type(dic),dic)    # <class 'dict'> {'k1': 'v1'}
    4 strd = json.dumps(dic)
    5 print(type(strd),strd)    # <class 'str'> {"k1": "v1"}
    6 dicd = json.loads(strd)
    7 print(type(dicd),dicd)    # <class 'dict'> {'k1': 'v1'}
      往文件里面写的操作
        一次性写进去一次性读出来
        要不每次写一行,每次读一行,不然会报错
     1 # dump 往文件里面写
     2 import json
     3 dic = {"k1":"v1"}
     4 f = open("fff","w",encoding="utf-8")
     5 json.dump(dic,f)
     6 f.close()
     7 
     8 # load 从文件读
     9 f = open("fff")
    10 res = json.load(f)
    11 f.close()
    12 print(type(res),res)

    pickle
      用法同jons,提供dump,load,dumps,loads方法
      但是pickle序列化后会变成tyles类型,无法看出来源内容但是不影响你其他操作
      因为是bytes类型,因此文件操作需要用wb,rb的类型进行操作
      pickle可以做任何任何数据类型,可以对集合进行序列化反序列化
      比jons还要有一点,他可以分别dump load的



     1 # shelve 只提供一个open方法,通过key可以写入或者获取到内容
     2 import  shelve
     3 f = shelve.open("shelve_file")
     4 f["key"] = {"int":10,"float":9.5,"string":"sda"}
     5 f.close()
     6 
     7 import  shelve
     8 f1 = shelve.open("shelve_file")
     9 exiting = f1["key"]
    10 f1.close()
    11 print(exiting)
    12 
    13 # writeback 不设置的话是没办法修改文件的
    14 # 不设置无法感知到修改,但是设置这个会对运行造成一定的资源占用和影响
    15 import shelve
    16 f1 = shelve.open('shelve_file')
    17 print(f1['key'])
    18 f1['key']['new_value'] = 'this was not here before'
    19 f1.close()
    20 
    21 f2 = shelve.open('shelve_file', writeback=True)
    22 print(f2['key'])
    23 f2['key']['new_value'] = 'this was not here before'
    24 f2.close()


  • 相关阅读:
    LinkedHashMap、HashMap和TreeMap的比较使用
    RocketMQ之Namesrv
    mysql创建、删除、查看索引
    java8 JVM堆内存(heap) 新生代 老年代 元空间垃圾回收详解
    Java中GCRoots包括哪些
    单例模式双重校验锁
    内存屏障
    LockSupport的用法及原理
    HashSet,TreeSet和LinkedHashSet的区别
    Windows常用网络命令技巧汇总
  • 原文地址:https://www.cnblogs.com/shijieli/p/9913138.html
Copyright © 2020-2023  润新知