• Python的序列化与反序列化


    一、什么是序列化和反序列化

    The process of converting a structured object into a sequence of bytes which can be stored in a file system or database or sent through the network is called serialization. The reversed process is called deserialization, which means reconverting a sequence of bytes into a structured object. Creating an object via deserialization is usually faster than initializing from a class.

    将结构化对象转换为可以存储在文件系统或数据库中或通过网络发送的字节序列的过程称为序列化。反之,把字节序列转化成结构对象的过程称为反序列化。


    理解:
    比如你有一个Python程序收集了网上很多的数据,然后经过转换成字节序列存储到了数据库,我的另一个Java程序去这个数据库读取那些数据做分析。Python把数据转换成字节序列存储在数据库的过程叫序列化,Java读取数据库的字节序列再格式化成Java可读的形式叫反序列化。

    二、Python实现序列化的方式

    基于文本的序列化格式:CSV, JSON, XML, YAML, TOML
    基于二进制的序列化格式:protobuf, Avro, pickle

    三、pickle模块实现序列化和反序列化

    1)序列化

    import pickle
    data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': {None, True, False}
    }
    with open("./data.picke","wb") as f:
    pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)

    2)反序列化

    import pickle
    with open('data.pickle', 'rb') as f:
    # The protocol version used is detected automatically, so we do not
    # have to specify it.
    data = pickle.load(f)
    print(data)

    四、json模块的序列化和反序列化

    1)序列化

    import json
    data = {
    "name": "Satyam kumar",
    "place": "patna",
    "skills": [
    "Raspberry pi",
    "Machine Learning",
    "Web Development"
    ],
    "email": "xyz@gmail.com",
    "projects": [
    "Python Data Mining",
    "Python Data Science"
    ]
    }
    with open("data_file.json", "w") as write:
    json.dump(data, write)

    2)反序列化

    import json
    with open("data_file.json", "r") as read_content:
    print(json.load(read_content))

    五、pickle模块与json模块的对比

    1)JSON是一个文本序列化格式,而pickle是一个二进制序列化格式;
    2)JSON是可以直接阅读的,而pickle不是;
    3)JSON是可互操作的,在Python系统之外广泛使用,而pickle则是Python专用的;
    4)默认情况下,JSON 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型。

    写在最后

    李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

    作者:李先生

    -------------------------------------------

    个性签名:在平凡中坚持前行,总有一天会遇见不一样的自己!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

    微信公众号 微信打赏 微信打赏

       微信公众号        微信打赏       支付宝打赏

  • 相关阅读:
    创龙DSP6748的DAC例程研究
    LARK BOARD开发板试用第一篇-上电测试学习
    itop-4412开发板使用第一篇-信号量的学习使用
    《王阳明》读书笔记
    【原创】大叔问题定位分享(5)Kafka客户端报错SocketException: Too many open files 打开的文件过多
    【原创】大叔问题定位分享(4)Kafka集群broker节点从zookeeper上消失
    【原创】大叔问题定位分享(3)Kafka集群broker进程逐个报错退出
    【原创】大数据基础之Kafka(1)简介、安装及使用
    【原创】大叔问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT
    【原创】大数据基础之Quartz(1)简介、源代码解析
  • 原文地址:https://www.cnblogs.com/lemon-le/p/14812645.html
Copyright © 2020-2023  润新知