详解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 requests接口测试实现代码

    以下是关于Python requests库实现接口测试的攻略: Python requests库实现接口测试 在Python中,使用requests库实现接口测试非常方便。以下是Python requests库实现接口测试的攻略。 发送GET请求 使用requests库发送GET请求非常简单,以下是发送GET请求的示例: import requests ur…

    python 2023年5月14日
    00
  • python处理列表的部分元素的实例详解

    来讲解一下 “python处理列表的部分元素的实例详解” 吧。 标题 我们首先需要添加一个一级标题来简述我们要讲解的内容,如下: Python处理列表的部分元素的实例详解 介绍 在Python中,列表是一种非常常见的数据类型,我们经常需要对列表进行操作来满足不同的需求。其中,处理列表的部分元素,是我们操作中非常重要的一个环节。比如说,我们可能需要取出一个列表…

    python 2023年5月14日
    00
  • python的matplotlib绘制动态图形(用animation中的FuncAnimation)

    %matplotlib auto# 数据透视表:# 统计各月每天的刷卡金额之和# month_day_df = pd.pivot_table(data_df,values=”刷卡金额”,index=”日”,columns=”月份”,aggfunc=np.sum)# 用折线图表示1月份每天的刷卡金额之和import matplotlib.pyplot as p…

    python 2023年4月18日
    00
  • Python使用Beautiful Soup包编写爬虫时的一些关键点

    在本攻略中,我们将介绍如何使用Python的BeautifulSoup包编写爬虫时的一些关键点。BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历HTML和XML文档,查找和提取数据。 以下是一个完整攻略包括两个示例。 步骤1:安装BeautifulSoup 首先,需要安装BeautifulSo…

    python 2023年5月15日
    00
  • for循环在Python中的工作原理详细

    下面我将详细讲解 for 循环在 Python 中的工作原理。 什么是 for 循环? for 循环是 Python 中最常用的一个循环结构,可以遍历任何序列,比如列表、元组、字符串等。for 循环的语法如下: for 变量 in 序列: 执行语句… 其中,“变量”表示每次循环中用来存储序列中的一个元素的变量名,“序列”可以是任何可迭代对象,比如列表、元…

    python 2023年5月14日
    00
  • 具有两个优先级 Python 的优先级队列

    【问题标题】:Priority Queue with two Priorities Python具有两个优先级 Python 的优先级队列 【发布时间】:2023-04-02 15:54:01 【问题描述】: 我正在寻找一种优先级队列,它允许我给出两个优先级。我希望它只检查第一个值然后检查第二个值这是一些代码 import Queue class Job(o…

    Python开发 2023年4月8日
    00
  • 手把手教你如何使python变为可执行文件

    下面我会为您详细讲解如何将 Python 代码转换为可执行文件,包含两条示例说明。 准备工作 在开始之前,需要先确保计算机中安装了 pyinstaller 这个第三方库。如果没有安装,可以通过以下命令来安装: pip install pyinstaller 步骤一:生成打包文件 打开终端并转换到要转换为可执行文件的 Python 文件所在目录。 在终端中运行…

    python 2023年5月30日
    00
  • Python lru_cache保存计算结果

    Python中的lru_cache装饰器是一种用于在计算结果中保存有限历史记录的技术。当函数被调用时,它会将参数和结果储存在内存中,并在后续调用时进行缓存,避免重复计算和提高程序响应速度。本文将详细介绍如何使用Python lru_cache装饰器。 什么是lru_cache lru_cache是Python标准库functools中的装饰器函数,它以LRU…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部