广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中序列化与反序列化的示例分析
  • 416
分享到

Python中序列化与反序列化的示例分析

2023-06-29 16:06:07 416人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章将为大家详细讲解有关python中序列化与反序列化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。初识序列化与反序列化什么是序列化?通俗一点来说,序列化就是将 对象的信息 或者 数据结构的

这篇文章将为大家详细讲解有关python中序列化与反序列化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    初识序列化与反序列化

    什么是序列化?

    通俗一点来说,序列化就是将 对象的信息 或者 数据结构的信息 通过一定的规则进行转换,可以达到 文件存储 或 网络传输 的效果。通过前面章节的学习,我们知道如果要进行存储或网络传输,最终的数据类型都是 字符串,而且这些字符串还需要是有一定规则的字符串。

    而我们今天要学习的 内置模块 ---> JSON 可以用于文件存储或者网络传输,这也是序列化的作用。

    而反序列化就是通过序列化规则生成的字符串再反转为原始的数据类型,这就是反序列化。

    这里我们可以引入 字符串 与 byte 之间的转换来理解 序列化与反序列化, 字符串与 byte 类型之间互相转换常用的 encode() 函数、与 decode() 函数,分别代表着编码与解码,所以有编码,就一定有解码 。套用在序列化来理解,既然存在序列化,那么就肯定有对应的反序列化哈。

    可序列化的数据类型

    哪些数据类型是可以序列化,哪些又是不可以序列化的呢?

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

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

    Python 中的json

    json模块是一个通用的序列化模块,通过它可以完成通用化的序列化与反序列化操作。为什么说是通用的,那是因为几乎所有的编程语言都有json模块,而且他们序列化与反序列化的规则是统一的。

    所以我们在 Python 中序列化的内容,在任意其他编程语言中都可以进行反序列化并使用原始的数据,这就是通用的意思。

    dumps() 与 loads() 函数

    json 中最重要的函数 - 就是 dumps() 与 loads() 函数

    方法名参数介绍举例返回值
    dumpsobj对象序列化json.dumps([1, 2, 3])字符串
    loadsstr反序列化Json.loads(’[1, 2, 3]’)原始数据类型

    可序列化数据类型演示案例

    演示案例如下:

    import jsonint_test = 666# 定义 整型、字符串、列表、元组、字典 五种数据类型 ,用于序列化测试str_test = 'test_string'list_test = [1, 2, 3]tuple_test = (4, 5, 6)dict_test = {'Name': '托尼.史塔克', 'Sex': '男'}int_test_json = json.dumps(int_test)# 将上文中五种数据类型进行序列化操作str_test_json = json.dumps(str_test)list_test_json = json.dumps(list_test)tuple_test_json = json.dumps(tuple_test)dict_test_json = json.dumps(dict_test)

    在 Treminal 终端 执行上述测试脚本,如下图:

    Python中序列化与反序列化的示例分析

    这里我们重点介绍一下 字典类型的序列化结果

    In [7]: dict_test_jsonOut[7]: '{"Name": "\\u6258\\u5c3c.\\u53f2\\u5854\\u514b", "Sex": "\\u7537"}'

    从执行结果我们可以看出字典类型的数据类型,经过序列化后。字典变成了字符串的同时,且字典内的 单引号 变成了 双引号,中文也变成了比特类型,并且进行了 encode 。(这是序列化的一个标准)

    为什么我们说 字典类型是非常是和序列化的呢?实际上 json 并不仅仅是一个标准,也是一种文件格式。比如我们编写脚本的 .py 格式的文件,就是 python 文件容器;.txt 格式的文件是普通的文本文件容器;同样的,.json 格式的文件也是文件容器,json 文件存储的样式(格式)就是字典类型的序列化格式。

    接下来我们再尝试将上文的五种测试数类型反序列化处理,看看结果会怎样?

    _int_test_json = json.loads(int_test_json)_str_test_json = json.loads(str_test_json)_list_test_json = json.loads(list_test_json)_tuple_test_json = json.loads(tuple_test_json)_dict_test_json = json.loads(dict_test_json)

    在 Treminal 终端 执行上述测试脚本,如下图:

    Python中序列化与反序列化的示例分析

    划重点:元组类型经过序列化处理后再通过反序列化还原数据时,会变为列表数据类型。这是因为 元组类型 是 python 语言中特有的数据类型,json 作为一个通用格式,无法识别元组类型。所以在针对元组类型进行序列化的时候,会先将 元组类型 ,先转为 列表,再进行序列化处理;同样的在进行反序列化处理时,就会将序列化后的 元组类型 ,又转成了 列表类型 。(类型的转换,不影响对数据的使用)

    bool 、None 类型的序列化与反序列化

    示例如下:

    print(json.dumps(True))# >>> 输出结果:trueprint(json.dumps(False))# >>> 输出结果:falseprint(json.dumps(None))# >>> 输出结果:null

    从上述运行结果来看,bool 类型经过序列化处理后,变成了小写的 true、false;而 None 类型则变成了 小写的 null 。

    之所以会这样,是因为在大多数的编程语言中, bool 类型都是小写的 true、false 。json 作为一个通用的序列化模块,也同样遵循着这种规则。(小写的 true、false 依然是字符串类型。 )

    接下来我们再将上述的序列化处理后的 bool 、None 类型 进行反序列化处理

    print(json.loads(json.dumps(None)))# >>> 输出结果:Noneprint(json.loads(json.dumps(True)))# >>> 输出结果:Trueprint(json.loads(json.dumps(False)))# >>> 输出结果:False

    从执行结果我们看到,经过反序列化之后,bool、None 类型又被还原成了 python 可读的状态。

    Python中序列化与反序列化的示例分析

    Python 中的pickle

    pickle模块与json模块一样可以进行序列化与反序列化,区别在于 pickle 是 Python 内置的序列化模块,而且不像 json 那么通用,它只能用于 python 自身来使用,其他语言可能就无法处理了,但pickle模块的性能是要比 json 更好的。如果是仅仅用于 python 自身来使用,pckle 模块还是一个挺不错的选择哦。

    dumps() 与 loads() 函数

    方法名参数介绍举例返回值
    dumpsobj对象序列化json.dumps([1, 2, 3])比特
    loadsstr反序列化Json.loads(’[1, 2, 3]’)原始数据类型

    注意:区别于 json ,pickle 模块的 dumps() 函数 返回的是 byte 类型 ,而 loads() 函数也仅支持 byte 类型的 pickle 序列进行反序列化的操作。

    pickle模块的序列化与反序列化练习

    pickle模块与json模块的用法是完全一致的,这里我们就不过多的演示,只针对 dict 类型演示一下即可。

    Python中序列化与反序列化的示例分析

    json 模块 - 序列化小实战

    需求:

    创建一个 test.json 的空文件。

    定义一个 write 函数写入 dict 数据类型的内容到 test.json 文件

    定义一个 read 函数,将写入到 test.json 文件的内容,反序列化读取出来

    coding:utf-8import jsondata = {'name': '托尼·史塔克', 'age': 52, 'top': 185}def read(path):                 # 定义 read() 函数,读取 test.json 文件(返回对象为 反序列化后的内容)    with open(path, 'r') as f:        data = f.read()    return json.loads(data)def write(path, data):          # 定义 write() 函数,将 data 写入到 test.json 文件    with open(path, 'w') as f:        if isinstance(data, dict):      # 判断 data 是否为字典类型。不是的情况下主动抛出异常            _data = json.dumps(data)            f.write(_data)        else:            raise TypeError('\'data\' 不是一个字典类型的数据')    return Trueif __name__ == '__main__':    write('test.json', data)    result = read('test.json')    print(result)    result['Sex'] = 'Man'           # 加入 {'Sex': 'Max'} 键值对    write('test.json', result)      # 将加入的 键值对 写入 test.json 文件    result_test_json = read('test.json')    print(result_test_json)

    执行结果如下:

    Python中序列化与反序列化的示例分析

    Python中序列化与反序列化的示例分析

    关于“Python中序列化与反序列化的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    --结束END--

    本文标题: Python中序列化与反序列化的示例分析

    本文链接: https://www.lsjlt.com/news/325644.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Python中序列化与反序列化的示例分析
      这篇文章将为大家详细讲解有关Python中序列化与反序列化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。初识序列化与反序列化什么是序列化?通俗一点来说,序列化就是将 对象的信息 或者 数据结构的...
      99+
      2023-06-29
    • Java中序列化与反序列化的示例分析
      这篇文章将为大家详细讲解有关Java中序列化与反序列化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言序列化:将对象转换为二进制序列在网络中传输或保存到磁盘反序列化:从网络或磁盘中将二进制...
      99+
      2023-06-15
    • Java序列化和反序列化示例分析
      这期内容当中小编将会给大家带来有关Java序列化和反序列化示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。序列化是为了把Java对象转化为字节序列(字节流)的过程。然后深拷贝是通过对流的操作来实现的...
      99+
      2023-06-26
    • Python反序列化的示例分析
      这篇文章给大家分享的是有关Python反序列化的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python反序列化漏洞Pickle序列化:pickle.dumps() 将对象序列化为字符串、pickle....
      99+
      2023-06-29
    • Jil、json序列化和反序列化库的示例分析
      这篇文章主要介绍了Jil、json序列化和反序列化库的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Jil很牛,比Newtonsof...
      99+
      2022-10-19
    • PHP中session反序列化的示例分析
      小编给大家分享一下PHP中session反序列化的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!session反序列化的漏洞是由三种不同的反序列化引擎所产生的的漏洞其中session.serialize_handl...
      99+
      2023-06-29
    • Ezpop pop序列化链反序列化实例分析
      这篇文章主要介绍了Ezpop pop序列化链反序列化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Ezpop pop序列化链反序列化实例分析文章都会有所收获,下面我们一起来看看吧。&...
      99+
      2023-06-30
    • Go语言中序列化与反序列化示例详解
      目录前言序列化array、slice、map、struct对象序列化的接口反序列化slice、map、struct反序列化总结前言 Go语言的序列化与反序列化在工作中十分常用,在Go...
      99+
      2022-11-13
    • Java对象的序列化和反序列化举例分析
      本篇内容介绍了“Java对象的序列化和反序列化举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什么是序列化与反序列化?  序列化:...
      99+
      2023-06-19
    • Java对象的XML序列化与反序列化实例解析
      上一篇文章我们介绍了java实现的各种排序算法代码示例,本文我们看看Java对象的xml序列化与反序列化的相关内容,具体如下。XML是一种标准的数据交换规范,可以方便地用于在应用之间交换各类数据。如果能在Java对象和XML文档之间建立某种...
      99+
      2023-05-30
      java xml 序列化
    • 深入浅析Java中的序列化与反序列化
      这篇文章将为大家详细讲解有关深入浅析Java中的序列化与反序列化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java 序列化和反序列化实例详解在分布式应用中,对象只有经过序列化才能在各个分...
      99+
      2023-05-31
      java 序列化 反序列化
    • Java序列化和反序列化示例介绍
      以前用序列化都是一些方法需要才实现的,后来业务需求要深拷贝才去研究。参阅了别人博客得出一些总结。 序列化是为了把Java对象转化为字节序列(字节流)的过程。然后深拷贝是通过对流的操作...
      99+
      2022-11-12
    • Kryo序列化及反序列化用法示例
      Kryo 是一个快速高效的 Java 对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络。    代码地址:https://github.com/EsotericSoft...
      99+
      2023-05-31
      kryo 序列化
    • Go语言中Json序列化反序列化及文件读写的示例分析
      这篇文章主要介绍Go语言中Json序列化反序列化及文件读写的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述JSON(JavaScript Object Notation,JavaScript对象表示法)是...
      99+
      2023-06-25
    • Python中怎么实现序列化与反序列化
      这篇文章给大家介绍Python中怎么实现序列化与反序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python序列化与反序列在程序运行的过程中,所有的变量都是在内存中,比如,定义一个 dict:d =&n...
      99+
      2023-06-15
    • Python的pickle序列化和JSON序列化实例分析
      本文小编为大家详细介绍“Python的pickle序列化和JSON序列化实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python的pickle序列化和JSON序列化实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
      99+
      2023-06-30
    • json序列化的示例分析
      这篇文章主要为大家展示了“json序列化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“json序列化的示例分析”这篇文章吧。json序列化(javaBean转Json的细节)Java对...
      99+
      2023-06-29
    • Python开发之序列化与反序列化:pi
        在日常开发中,所有的对象都是存储在内存当中,尤其是像python这样的坚持一切接对象的高级程序设计语言,一旦关机,在写在内存中的数据都将不复存在。另一方面,存储在内存够中的对象由于编程语言、网络环境等等因素,很难在网络中进行传输交互...
      99+
      2023-01-30
      序列 化与 序列化
    • 怎么在python中使用序列化与反序列化
      这篇文章将为大家详细讲解有关怎么在python中使用序列化与反序列化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesuts;2.s...
      99+
      2023-06-14
    • Java序列化与字典功能的序列化实例分析
      这篇文章主要介绍了Java序列化与字典功能的序列化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java序列化与字典功能的序列化实例分析文章都会有所收获,下面我们一起来看看吧。两种解决方案前端查询字典数...
      99+
      2023-07-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作