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

    概念:

      序列化:其他数据类型转换成一个字符串数据类型。

      反序列化:字符串转换成其他数据类型。

      序列 -- 字符串

    必须要转换成字符串的场景:

      往文件里写数据的时候只能写字符串,不能写字典的。

      网络传输的时候只能传bytes,字典也不能直接转换成bytes。

    可以用到的模块:

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

    json 可转:数字,字符串,列表,字典,元组

      不可转:集合

      特殊改变:会将字符串改成双引号,字典里面的单引号就会改成双引号。

      元组的序列化会被变成列表,本身是元组的序列化后再反序列化便不会变成元组,会变成列表。

    直接写内存里面的操作

    序列化方法:dumps

    反序列化方法:loads

    import json
    dic = {"k1":"v1"}
    print(type(dic),dic)    # <class 'dict'> {'k1': 'v1'}
    strd = json.dumps(dic)
    print(type(strd),strd)    # <class 'str'> {"k1": "v1"}
    dicd = json.loads(strd)
    print(type(dicd),dicd)    # <class 'dict'> {'k1': 'v1'}

    往文件里写的操作:

      一次性写进去一次性读出来。要不然每次写一行,每次读一行,不然会报错。

    # dump 往文件里面写
    import json
    dic = {"k1":"v1"}
    f = open("fff","w",encoding="utf-8")
    json.dump(dic,f)
    f.close()
    
    # load 从文件读
    f = open("fff")
    res = json.load(f)
    f.close()
    print(type(res),res)

    pickle:

      用法同 json,提供dump,load,dumps,loads方法。

      但是 pickle 序列化后会变成bytes类型,无法看出来源内容,但是不影响你其他操作。

      因为是bytes类型,因此文件操作需要用wb,rb的类型进行操作。

      pickle 可以做什么数据类型,可以对集合进行序列化和反序列化。

      与 json 相比,它可以分别dump和load。

    # shelve 只提供一个open方法,通过key可以写入或者获取到内容
    import  shelve
    f = shelve.open("shelve_file")
    f["key"] = {"int":10,"float":9.5,"string":"sda"}
    f.close()
    
    import  shelve
    f1 = shelve.open("shelve_file")
    exiting = f1["key"]
    f1.close()
    print(exiting)
    
    # writeback 不设置的话是没办法修改文件的
    # 不设置无法感知到修改,但是设置这个会对运行造成一定的资源占用和影响
    import shelve
    f1 = shelve.open('shelve_file')
    print(f1['key'])
    f1['key']['new_value'] = 'this was not here before'
    f1.close()
    
    f2 = shelve.open('shelve_file', writeback=True)
    print(f2['key'])
    f2['key']['new_value'] = 'this was not here before'
    f2.close()
  • 相关阅读:
    dedecms初解
    Java二十三设计模式之------单例模式
    Java二十三设计模式之------工厂方法模式
    数组和集合的区别及深入了解
    团队项目计划
    团队介绍及团队题目
    第二阶段冲刺(第十天)
    第二阶段冲刺(第九天)
    第二阶段冲刺(第八天)
    第二阶段冲刺(第七天)
  • 原文地址:https://www.cnblogs.com/purewhite/p/10641919.html
Copyright © 2011-2022 走看看