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

      序列化

    """
        序列--字符串
        序列化--其他数据类型转化为字符串数据类型
        反序列化--字符串转化为其他数据类型
    """

      json模块

    """
        json 五星好评  数字 字符串 列表 字典 元组
            优点:通用的序列化格式
            缺点:只有很少的一部分数据类型-->字符串
    """

       

        1,dumps和loads

    import json
    # dumps和loads 操作内存中的数据
    dic = {'k1': 'v1'}
    print(type(dic), dic)   # <class 'dict'> {'k1': 'v1'}
    str_d = json.dumps(dic)  # 序列化
    print(type(str_d), str_d)  # <class 'str'> {"k1": "v1"}
    dic_l = json.loads(str_d)  # 反序列化
    print(type(dic_l), dic_l)  # <class 'dict'> {'k1': 'v1'}

        2,dump和load

    # dump和load 操作文件中的数据  序列化中文的话,要修改默认参数ensure_ascii=False
    dic = {'k1': 'v1'}
    f = open('json_test', 'w', encoding='utf-8')
    json.dump(dic, f)   # 文件序列化入的内容为{"k1": "v1"}
    f.close()
    f = open('json_test', encoding='utf-8')
    # load只能反序列化一次性序列化入文件中的内容,如果多次dump,load时会报错!
    ret = json.load(f)
    print(ret)   # {'k1': 'v1'}
    f.close()

      json一些参数的用法

    dic = {'name': '蔠缬草', 'age': 25, 'hobby': 'read'}
    str_d = json.dumps(dic)  # 序列化
    str_d1 = json.dumps(dic, ensure_ascii=False)  # 序列化中文要想能看懂内容,要修改参数ensure_ascii=False
    print(str_d)  # {"age": 25, "name": "u8520u7f2cu8349", "hobby": "read"}
    print(str_d1)  # {"hobby": "read", "name": "蔠缬草", "age": 25}
    
    # 特殊格式的序列化
    dic = {'name': '蔠缬草', 'age': 25, 'hobby': 'read'}
    str_d = json.dumps(dic, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False)
    print(str_d)
    # 打印内容:
    """
    {
        "age":25,
        "hobby":"read",
        "name":"蔠缬草"
    }
    """

      

      pickle模块

    """
        pickle  序列化为bytes类型
            优点:python中所有的数据类型-->字符串
            缺点:序列化的内容只有python能识别,序列化和反序列化需要相同的环境。
    """

      pickle方法和json的方法相同

    import pickle
    # pickle和json的用法一样,不同的是序列化之后的值是bytes类型
    dic = {'k1': 'v1', 'k2': 'v2'}
    pd_str = pickle.dumps(dic)
    print(pickle)  # 序列化 打印bytes类型
    pl_str = pickle.loads(pd_str)
    print(pl_str)  # 反序列化
    dic = {'k1': 'v1', 'k2': 'v2'}
    f = open('pickle_test', 'wb')
    pickle.dump(dic, f)   # 序列化  写入的是bytes类型
    f.close()
    f = open('pickle_test', 'rb')
    ret = pickle.load(f)  # 反序列化
    print(ret)

      shelve模块

    """
        shelve
            存在序列化句柄
            使用句柄直接操作,非常方便
    """

      shelve只有open方法,打开文件返回一个序列化句柄,通过操作句柄来完成序列化的相关操作。

    import shelve
    f = shelve.open('shelve_test')  # 产生序列化句柄
    f['key'] = {'k1': 'v1', 'k2': 'v2'}   # 操作句柄进行文件序列化写入
    f.close()
    f = shelve.open('shelve_test')
    print(f['key'])   # 反序列化取值,key必须存在,否则报错
    f.close()

      shelve writeback参数的用法

    f = shelve.open('shelve_test', writeback=False)  # 参数writeback=False 数据修改不会生效
    f['key']['k3'] = 'v3'  # 修改并没有生效
    f.close()
    f = shelve.open('shelve_test')
    print(f['key'])   # {'k2': 'v2', 'k1': 'v1'}
    f.close()
    
    f = shelve.open('shelve_test', writeback=True)
    f['key']['k3'] = 'v3'  # 修改生效
    f.close()
    f = shelve.open('shelve_test')
    print(f['key'])   # {'k3': 'v3', 'k2': 'v2', 'k1': 'v1'}
    f.close()

     

  • 相关阅读:
    前端工程师须知pc电脑端分辨率
    移动前端的坑
    07.01工作笔记
    缓存
    word-wrap,white-space和text-overflow属性
    页面结构
    Spring Bean的作用域和自动装配
    Spring配置文件
    初识Spring和IOC理解
    MyBatis缓存
  • 原文地址:https://www.cnblogs.com/zxc-Weblog/p/8288982.html
Copyright © 2011-2022 走看看