Python中的序列化详细解析

 更新时间:2023年11月29日 09:15:02   作者:时代&信念  
这篇文章主要介绍了Python中的序列化详细解析,序列化是指把程序中的一个类转化成一个标准化的格式,标准化的意义是这个格式可以跨程序,跨平台的被使用,而且保持其原有的内容,规范,需要的朋友可以参考下

1.什么是数据序列化?

序列化 (Serialization),是指把程序中的一个类转化成一个标准化的格式。

标准化的意义是这个格式可以跨程序,跨平台的被使用,而且保持其原有的内容,规范。

2.为什么要进行数据序列化呢?

(1)一致性

我们将要保存的数据,序列化成标准的格式(Json格式或者Pickle格式)。之后再反序列化回来,数据依然是原来的。保持了数据的一致性。

(2)有效性

序列化之后,可以减少内存和网络资源的占用。

(3)兼容性

将数据序列化之后,Json格式或者Pickle格式,我可以在其他平台(其他操作系统的电脑)上依然使用。 我用python对数据进行了序列化,我之后可以使用java等其他语言,对其进行反序列,然后进行使用,数据并没有发生改变。

3.数据序列化的应用

(1)应用一

你的程序需要和其他程序交流,例如 平台 API, 网页请求

在这里插入图片描述

(2)应用二

串行任务流,每一个任务结束之后数据通过序列化传递到下一个任务。

在这里插入图片描述

4.JSON

JSON 是一个文件格式,也是一个标准化的数据传输方案,通常网站的后端和前端的交流,移动 APP 和云服务器的交流方式都是通过 JSON。

(1)序列化

# 导入json模块
import json

simple_dict = {'name': 'zxy', 'age': 21}
with open('simple_dict.txt', 'w') as file_to_write:
    # 进行json序列化,然后写入simple_dict.txt文件中
    json.dump(simple_dict, file_to_write)

(2)反序列化

with open('simple_dict.txt', 'r') as file_to_read:
    loaded_simple_dict = json.load(file_to_read)
    print(loaded_simple_dict)
    print(type(loaded_simple_dict))

在这里插入图片描述

(3)Json 方法的弊端

当遇到一些 Python 特定的高级数据类型的时候,Json 会因为没有标准而无法进行序列化。 会报如下错误:

在这里插入图片描述

5.Pickle

Pickle 和 Json 不同的是,Pickle 是 Python 专属的序列化方案,可以转化大多数 Python 的数据类型,并且储存方式是二进制(Byte Code)。二进制的储存方式只有机器才能理解,但是同时也保证了一定的数据隐秘性和高效性。

(1)序列化

import pickle
import datetime
abc_dict = {datetime.datetime(2019, 7, 18, 0, 0): 9682.24,
            datetime.datetime(2019, 7, 17, 0, 0): 9411.61,
            datetime.datetime(2019, 7, 16, 0, 0): 10858.7,
            datetime.datetime(2019, 7, 15, 0, 0): 10195.0,
            datetime.datetime(2019, 7, 14, 0, 0): 11378.23,
            datetime.datetime(2019, 7, 13, 0, 0): 11810.0,
            datetime.datetime(2019, 7, 12, 0, 0): 11338.9,
            datetime.datetime(2019, 7, 11, 0, 0): 12090.99,
            datetime.datetime(2019, 7, 10, 0, 0): 12577.85}

with open('abc.pk', 'wb') as file_to_write:
    pickle.dump(abc_dict, file_to_write)

二进制的储存方式只有机器才能理解,保证了一定的数据隐秘性和高效性。

在这里插入图片描述

(2)反序列化

import pickle
import datetime
abc_dict = {datetime.datetime(2019, 7, 18, 0, 0): 9682.24,
            datetime.datetime(2019, 7, 17, 0, 0): 9411.61,
            datetime.datetime(2019, 7, 16, 0, 0): 10858.7,
            datetime.datetime(2019, 7, 15, 0, 0): 10195.0,
            datetime.datetime(2019, 7, 14, 0, 0): 11378.23,
            datetime.datetime(2019, 7, 13, 0, 0): 11810.0,
            datetime.datetime(2019, 7, 12, 0, 0): 11338.9,
            datetime.datetime(2019, 7, 11, 0, 0): 12090.99,
            datetime.datetime(2019, 7, 10, 0, 0): 12577.85}

with open('abc.pk', 'wb') as file_to_write:
    # pickle序列化,然后以二进制的形式存入文件中
    pickle.dump(abc_dict, file_to_write)

with open('abc.pk', 'rb') as file_to_read:
    # 以二进制的形式进行读取文件
    abc_dict_pk = pickle.load(file_to_read)
    print(abc_dict_pk)
    print(type(abc_dict_pk))

在这里插入图片描述

6.总结

这里两个方法的行为都是在序列化数据,所以在调用函数上感觉完全一样。

但是本质上 Json 写入文件的是字符串,而 Pickle 则是把数据转化成了二进制,两个是完全不同的处理方案。

到此这篇关于Python中的序列化详细解析的文章就介绍到这了,更多相关Python中的序列化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pytest生成测试报告的实现

    Pytest生成测试报告的实现

    本文介绍了如何使用 pytest-html 插件生成测试报告,并提供了详细的操作步骤、配置项和示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • 详解Windows下PyCharm安装Numpy包及无法安装问题解决方案

    详解Windows下PyCharm安装Numpy包及无法安装问题解决方案

    这篇文章主要介绍了详解Windows下PyCharm安装Numpy包及无法安装问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • python+openCV对视频进行截取的实现

    python+openCV对视频进行截取的实现

    这篇文章主要介绍了python+openCV对视频进行截取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python3中SQLMap安装教程

    python3中SQLMap安装教程

    本文主要介绍了python3中SQLMap安装教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 在Django中创建自己的自定义用户模型

    在Django中创建自己的自定义用户模型

    这篇文章主要介绍了在Django中创建自己的自定义用户模型,创建自己的自定义用户模型至关重要。将来,如果要对模型进行一些更改,则可以轻松进行这些更改。不然我们可能必须对模型进行一些更改,而且代码的某些部分也将被更改,下面一起进入文章里哦阿姐个表格的详细内容吧
    2022-01-01
  • 手把手教你使用Python创建微信机器人

    手把手教你使用Python创建微信机器人

    微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地,今天我们要将便是如何用Python来生成一个微信机器人,感兴趣的朋友跟随小编一起看看吧
    2019-04-04
  • 解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题

    解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题

    这篇文章主要介绍了解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python操作mongodb根据_id查询数据的实现方法

    python操作mongodb根据_id查询数据的实现方法

    这篇文章主要介绍了python操作mongodb根据_id查询数据的实现方法,实例分析了Python根据pymongo不同版本操作ObjectId的技巧,需要的朋友可以参考下
    2015-05-05
  • Python实现操纵控制windows注册表的方法分析

    Python实现操纵控制windows注册表的方法分析

    这篇文章主要介绍了Python实现操纵控制windows注册表的方法,结合实例形式分析了Python使用_winreg模块以及win32api模块针对Windows注册表操作相关实现技巧,需要的朋友可以参考下
    2019-05-05
  • Python 列表排序详解

    Python 列表排序详解

    这篇文章主要介绍了Python中对列表排序实例,本文给出了9个List的排序实例,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10

最新评论