首页 > 其他 > 详细

24.序列化与反序列化

时间:2021-06-10 22:47:15      阅读:30      评论:0      收藏:0      [点我收藏+]

 

(二十六)序列化与反序列化

 

1:什么是序列化,什么是反序列化

 

    1:序列化:简单来说就是将内存中的数据转换为字节序列保存到文件
    2:反序列化:将字节序列的文件中的内容恢复到内存中

 

2:pickle模块

 

    # 示例1:序列化写入文件
    import pickle
    lst = [1,2,3,4]
    dicty = {name: Robby, age: 27}
    with open(file=test.txt, mode=wb) as f:
        pickle.dump(lst, f)
        pickle.dump(dicty, f)
    with open(file=test.txt, mode=rb) as f:
        for line in f:
            print(line)
    # 示例2:序列化Python对象
    import pickle
    def add(x, y):
        print(x + y)
    class Add:
        def __init__(self):
            print(hello)
    serialise_obj1 = pickle.dumps(add)
    serialise_obj2 = pickle.dumps(Add)
    print(serialise_obj1)
    print(serialise_obj2)
    new_add = pickle.loads(serialise_obj1)
    new_Add = pickle.loads(serialise_obj2)
    print(new_add)
    print(new_Add)
    print(new_add(1,2))
    print(new_Add())
    # 示例3: 将序列化的函数写入文件,到另外一个模块中运行, 会报错,为什么? 
    文件1
    import pickle
    def add(x, y):
        print(x + y)
    with open(test.txt, wb) as f:
        pickle.dump(add, f)
    文件2
    import pickle
    with open(test.txt, rb) as f:
        new_function = pickle.load(f)  # AttributeError: Cant get attribute add on <module __main__ from /Users/yinhuanyi/Documents/XKD_Python_Course/first_chapter/other.py>
    文件2修改
    def add(x, y):
        print(x + y)
    import pickle
    with open(test.txt, rb) as f:
        new_function = pickle.load(f)
        new_function(1,2)

 

3:Json模块

技术分享图片

技术分享图片

 

    # json 跨语言的序列化方式,用于存储和展示数据
    {
        "name": "中国",
        "province": [{
            "name": "黑龙江",
            "cities": {
                "city": ["哈尔滨", "大庆"]
            }
        }, {
            "name": "广东",
            "cities": {
                "city": ["广州", "深圳", "珠海"]
            }
        }, {
            "name": "台湾",
            "cities": {
                "city": ["台北", "高雄"]
            }
        }, {
            "name": "新疆",
            "cities": {
                "city": ["乌鲁木齐"]
            }
        }]
    }
    # python 与 json对象的转化
    import json
    dictionary = {
        name: Robby,
        age: 27
    }
    json_obj = json.dumps(dictionary)
    print(json_obj)
    new_dict = json.loads(json_obj)
    print(new_dict)
    # json.dump()和json.load() 是将json对象保存到文件

 

 

4:msgpack模块

 

    # 需要先安装
    pip install msgpack-python
    # 示例
    import msgpack
    dictionary = {
        name: Robby,
        age: 27
    }
    msgpack_obj = msgpack.packb(dictionary)
    print(msgpack_obj)
    new_dictionary = msgpack.unpackb(msgpack_obj, )
    print(new_dictionary)
    print(type(new_dictionary))

 

 

1.什么是序列化与反序列化?

  • 序列化:将内存中的数据转换为字节序列保存到文件;

  • 反序列化:将字节序列的文件中的内容恢复到内存中;

2.pickle模块

(1)如何序列化写入文件:

  • 导入pickle模块;

  • 初始化数据结构;

  • 通过with open上下文管理器的方式打开文件(文件操作模式为只写二进制模式);

  • 然后使用pickle模块中的dump方法对数据结构序列化,并且将之写入文件;

(2)读取文件序列化内容

  • 通过with open上下文管理器的方式打开文件(文件操作模式为只读二进制模式);

  • 使用pickle模块的load方法将文件内序列化好的对象加载到内存中,将之还原;

(3)序列化Python对象

  • dumps方法:直接序列化Python对象,对象序列化后以 bytes 对象返回,不写入文件;

  • loads方法:直接把序列化好对象进行还原,并返回其重组后的对象;

(4)序列化函数还原

  • 将序列化的函数写入文件,到另外一个模块中运行, 必须先在当前这模块声明这个函数;

  • 因为序列化还原只会还原函数名,函数对象的语句块不会序列化;

3.Json模块

  • JSON是一种轻量级的数据交换格式;

  • 使用 JSON 函数需要导入 json 模块;

  • json.dumps:用于将 Python 对象编码成 JSON 字符串;

  • json.loads:用于将已编码的 JSON 字符串解码为 Python 对象,该函数返回 Python 字段的数据类型;

4.msgpack模块

  • 是一个基于二进制高效的对象化序列类库,可用于跨语言通信;

  • 首先需要在项目中安装msgpack模块:Pip install msgpack-python,然后再导入使用;

  • packb:将对象序列化成一个二进制对象;

  • unpackb:将对象还原;

 

24.序列化与反序列化

原文:https://www.cnblogs.com/zhongguiyao/p/14872049.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!