详解Python 序列化Serialize 和 反序列化Deserialize

详解Python 序列化Serialize 和 反序列化Deserialize

序列化(Serialization)是将数据结构或对象状态转换为可以存储或传输的格式的过程。在网络传输、数据存储和编程中经常会使用序列化。Python提供了可以方便地序列化和反序列化数据的标准库模块。

序列化

Python常用的序列化方式有两种:pickle和json。

Pickle

Pickle是一种Python特有的序列化模块,可以将Python中的数据类型转换为序列化后的字节流,也可以反序列化将字节流转换为Python中的数据类型。

下面是一个使用Pickle将Python对象进行序列化的示例:

import pickle

data = [1, 2, 3, {'a': 1, 'b': 2, 'c': 3}]
pickle_data = pickle.dumps(data)
print(pickle_data)

输出结果为:

b'\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03\x8e\x94}\x94(\x8c\x01a\x94K\x01\x8c\x01b\x94K\x02\x8c\x01c\x94K\x03uu.'

通过pickle.dumps()方法将列表data序列化为字节流,结果为二进制类型。使用pickle.loads()方法将字节流转换为Python数据类型。

pickle_data = b'\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03\x8e\x94}\x94(\x8c\x01a\x94K\x01\x8c\x01b\x94K\x02\x8c\x01c\x94K\x03uu.'
data = pickle.loads(pickle_data)
print(data)

输出结果为:

[1, 2, 3, {'a': 1, 'b': 2, 'c': 3}]

JSON

JSON是一种轻量级的数据交换格式,支持几乎所有编程语言。Python提供了json模块可以方便地进行JSON字符串和Python数据类型的转换。JSON序列化和反序列化比pickle更安全,可以跨平台使用。

下面是一个使用json将Python对象进行序列化的示例:

import json

data = {'name': 'Tom', 'age': 18, 'skills': ['Python', 'Java', 'C']}
json_data = json.dumps(data)
print(json_data)

输出结果为:

{"name": "Tom", "age": 18, "skills": ["Python", "Java", "C"]}

通过json.dumps()方法将字典data序列化为JSON字符串,结果为字符串类型。使用json.loads()方法将JSON字符串转换为Python数据类型。

json_data = '{"name": "Tom", "age": 18, "skills": ["Python", "Java", "C"]}'
data = json.loads(json_data)
print(data)

输出结果为:

{'name': 'Tom', 'age': 18, 'skills': ['Python', 'Java', 'C']}

反序列化

与序列化对应的是反序列化(Deserialization),将序列化后的字节流或JSON字符串转换为Python数据类型。

下面分别介绍使用Pickle和JSON进行反序列化的方法。

Pickle

使用pickle进行反序列化需要使用pickle.loads()方法,将序列化后的字节流转换为Python数据类型。

import pickle

pickle_data = b'\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03\x8e\x94}\x94(\x8c\x01a\x94K\x01\x8c\x01b\x94K\x02\x8c\x01c\x94K\x03uu.'
data = pickle.loads(pickle_data)
print(data)

输出结果为:

[1, 2, 3, {'a': 1, 'b': 2, 'c': 3}]

JSON

使用json进行反序列化需要使用json.loads()方法,将序列化后的JSON字符串转换为Python数据类型。

import json

json_data = '{"name": "Tom", "age": 18, "skills": ["Python", "Java", "C"]}'
data = json.loads(json_data)
print(data)

输出结果为:

{'name': 'Tom', 'age': 18, 'skills': ['Python', 'Java', 'C']}

总结

序列化和反序列化是网络传输和数据存储中常用的技术。Python中提供了pickle和json模块方便地进行序列化和反序列化操作,开发者可以根据需求选择使用适合的序列化方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python 序列化Serialize 和 反序列化Deserialize - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Python判断是否json是否包含一个key的方法

    判断一个json对象是否包含某个key的方法在Python中有很多种,下面给出两种常见的方法: 使用in关键字 使用in关键字可以非常简单地判断一个json对象是否包含某个key,示例如下: import json data = ‘{"name": "John", "age": 30, "…

    python 2023年6月3日
    00
  • Python OpenCV实现图片预处理的方法详解

    Python OpenCV实现图片预处理的方法详解 介绍 在进行机器视觉相关任务时,我们经常需要进行图片预处理,以得到更好的视觉效果或者更好的算法结果。Python OpenCV是一个非常流行的图像处理库,其中包含了丰富的图像处理工具,可用于加速并简化图像预处理的过程。 本文将详细讲解如何通过Python OpenCV实现图片预处理的方法,包括调整大小、裁剪…

    python 2023年5月18日
    00
  • Python网页解析利器BeautifulSoup安装使用介绍

    BeautifulSoup库介绍 BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它可以解析HTML和XML文件,并提供了一些方便的方法来查找和操作数据。BeautifulSoup库可以帮助我们快速地从网页中提取所需的信息,是Python中最常用的网页解析库之一。 安装BeautifulSoup库 在使用Beautifu…

    python 2023年5月14日
    00
  • Python (Kivy) – 如何动态添加按钮和绑定不同的参数

    【问题标题】:Python (Kivy) – How to dynamically add buttons and bind with different argumentsPython (Kivy) – 如何动态添加按钮和绑定不同的参数 【发布时间】:2023-04-03 16:09:01 【问题描述】: 我已经知道如何在 kivy 中动态添加按钮,以及如…

    Python开发 2023年4月8日
    00
  • python挖矿算力测试程序详解

    Python挖矿算力测试程序详解 简介 本文章将介绍一个基于Python的挖矿算力测试程序,同时提供使用说明和示例,希望对各位挖矿爱好者能够有所帮助。 目录 什么是挖矿算力测试程序 挖矿程序工作原理 使用说明 示例说明 总结 什么是挖矿算力测试程序 挖矿算力测试程序是一种用于测试计算机的挖矿算力的程序。通常情况下,挖矿算力测试程序包含一些特定的算法,用于测试…

    python 2023年6月2日
    00
  • python中plot实现即时数据动态显示方法

    Python中可视化图形库matplotlib中的plot函数可以实现即时数据动态显示。要实现此功能,我们需要使用matplotlib的animation模块和FuncAnimation函数。 下面是完整攻略: 步骤1:导入必要的库 首先,我们需要导入必要的Python库,包括matplotlib和numpy: import matplotlib.pyplo…

    python 2023年5月19日
    00
  • Python异常处理中容易犯得错误总结

    下面就来为大家详细讲解“Python异常处理中容易犯得错误总结”的完整攻略。 1. Python异常处理简介 Python异常处理是指对于程序运行中出现的错误进行捕捉和处理,使得程序可以在错误发生的情况下仍然正常运行。Python中常用的异常处理语句有try-except语句和try-finally语句。其中,try-except语句用于捕捉并处理程序中的异…

    python 2023年5月13日
    00
  • 解决Python requests 报错方法集锦

    解决Python requests报错方法集锦 在Python中,requests是一个常用的HTTP库,用于发送HTTP请求和处理HTTP响应。在使用requests库时,有时会遇到各种报错,例如“requests.exceptions.SSLError: HTTPSConnectionPool”requests.exceptions.Connection…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部