• Python来解释“序列化和反序列化”


    序列化和反序列化

    一、概念

      通过文件操作,可将字符串写入到一个本地文件,但是无法将一个对象,如:字典,列表,元组直接写入到一个文件里,这是就需要将这个对象进行序列化,然后写入文件。设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化

    序列化: 将对象转换为字节序列。

    反序列化:将字节序列转换为对象。

    可序列化的数据类型

      可序列化:number、str、list、tuple、dict [字典是最常用的序列化数据类型]。

      不可序列化:class 、def (函数与实例化对象)、set 是无法进行序列化的。

    二、JSON模块

      在Python中,JSON模块可以用来实现序列化和反序列化,JSON本质为字符串。JSON提供了dump和dumps方法,将一个对象序列化。把对象转换为字符串,方法本身不具备将数据写入到文件的功能。

    python和json数据的对应关系
    python json
    字典dict object
    列表list、元组tuple 数组array
    int、float number
    True true
    False false
    None null

    Python的序列化

    dumps()

    import json
    
    names = ['Jack', 'Dennis', 'Lucy', 'Mike', 'Tony']
    
    # dumps 传入一个对象,转换为一个JSON字符串
    
    result = json.dumps(names)
    
    print(result)
    
    print(type(result))  # <class ‘str’>
    
    with open('json.txt', 'w') as f:
        f.write(result)

     dump()

    import json
    
    names = ['Jack', 'Dennis', 'Lucy', 'Mike', 'Tony']
    
    fp =open('json2.txt', 'w')
    
    json.dump(names, fp)
    
    fp.close()
    
    # 或者--------------------------------
    
    with open('json3.txt', 'w') as f:
    
        json.dump(names, f)

    Python反序列化

     loads( )

    with open('json.txt', 'r') as f:
        content = f.read()
        print(content)
        print(type(content))
    
    结果:
    ["Jack", "Dennis", "Lucy", "Mike", "Tony"]
    <class 'str'>
    import json
    
    with open('json.txt', 'r') as f:
        content = f.read()
        result = json.loads(content)
        print(type(result))
    
    
    结果:<class 'list'>

    使用loads( )方法后将字符串转变为列表对象

     load()

    import json
    
    with open('json.txt') as f:
        result = json.load(f)
        print(result)
        print(type(result))
    
    
    结果:
    ['Jack', 'Dennis', 'Lucy', 'Mike', 'Tony']
    <class 'list'>

    举个栗子

    import json  
    
    person = {"name": "maomao", "age": 24, "is_married": True}
    print("序列化前的数据:", person)  
    
    json1 = json.dumps(person)  # 序列化操作
    print("序列化后的数据:", repr(json1))  # repr是一个展示对象的函数
    
    person2 = json.loads(json1)  # 反序列化操作
    print("反序列化后的数据:", person2)
    
    
    执行结果:
    
    序列化之前的数据: {'name': 'maomao', 'age': 24, 'is_married': True}
    序列化之后的数据: '{"name": "maomao", "age": 24, "is_married": true}'
    反序列化之后的数据: {'name': 'maomao', 'age': 24, 'is_married': True}
  • 相关阅读:
    python实现决策树
    ag 命令的帮助文档
    Linux rsync 命令学习
    常用数学符号读法及其含义
    Python 数据分析
    Django 创建项目笔记
    Python 实用技巧
    Python 必备好库
    Pytest 简明教程
    Python 打包中 setpy.py settuptools pbr 的了解
  • 原文地址:https://www.cnblogs.com/wzhqzm/p/16355726.html
Copyright © 2020-2023  润新知