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

yizhihongxing

详解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实现提取COCO,VOC数据集中特定的类

    一、前言 在深度学习中,数据集是非常重要的资源之一,但是我们有时需要从一个大的数据集中提取出特定的类别,这样可以让我们在模型训练、测试或者其他操作上更加方便。本文将介绍如何使用Python代码从COCO、VOC数据集中提取特定的类。 二、准备工作 在进行以下操作前,需要下载并解压相应的数据集,以COCO2017数据集为例,可以在官方网站(http://coc…

    python 2023年6月3日
    00
  • 使用Python检测文章抄袭及去重算法原理解析

    下面是关于“使用Python检测文章抄袭及去重算法原理解析”的完整攻略。 1. 文章抄袭检测算法概述 文章抄袭检算法是一种用于检测文本相度的算法,它的基本思想是将文本转换成向量表示,然后算向量之间的相似度。常见的文章抄袭检测算法包括余弦相似度算法、Jaccard相似度算法等。在Python中,我们可以使用各种数据结构和算法实现这些文章抄袭检测算法。 2. 文…

    python 2023年5月13日
    00
  • 移除切比雪夫多项式小拖尾系数的Python程序

    移除切比雪夫多项式小拖尾系数的过程,通常被称为切比雪夫多项式带通滤波。这个过程可以通过一系列的数学公式和操作完成。在Python中,我们可以用一些库和函数来实现这个过程。以下是一种比较完整的Python程序,它可以用来移除切比雪夫多项式小拖尾系数: 导入所需库 import scipy.signal as signalimport numpy as np 配…

    python-answer 2023年3月25日
    00
  • 使用python打印十行杨辉三角过程详解

    下面我将详细讲解使用Python打印十行杨辉三角的过程。 什么是杨辉三角 杨辉三角,又称帕斯卡三角形,是二项式系数在三角形中的一种几何排列,如下所示: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 杨辉三角的基本性质是:每行端点与结尾的数为1,其余数等于上一行相邻两数之和。 思路分析…

    python 2023年6月5日
    00
  • 详解Python核心对象类型字符串

    以下是详解Python核心对象类型字符串的完整攻略: 字符串的定义 在Python中,字符串是一种不可变的序列类型,用于表示文本数据。字符串可以使用单引号、双引号或三引号来定义。以下是一些示例代码: s1 = ‘Hello, World!’ s2 = "Hello, World!" s3 = ”’Hello, World!”’ 在这个…

    python 2023年5月14日
    00
  • 有没有办法从python中的调用函数访问变量?

    【问题标题】:Is there a way to access a variable from a calling function in python?有没有办法从python中的调用函数访问变量? 【发布时间】:2023-04-01 11:24:01 【问题描述】: 我不确定这是否可行,但我想知道是否有办法从外部范围获取变量而不将其作为参数传递。 我玩过…

    Python开发 2023年4月8日
    00
  • 详解Python 计算卡方阈值

    Python计算卡方阈值的完整攻略如下: 什么是卡方阈值 卡方阈值(Chi-Square Threshold)是用于计算数据之间是否有相互关系的一种统计方法,通常用于分类变量或二项式试验数据的分析中。通过卡方阈值的计算可以得出样本总体和理论分布之间的偏离程度,从而判断样本数据是否符合理论分布。 如何计算卡方阈值 计算卡方阈值需要用到scipy库中的chi2_…

    python-answer 2023年3月25日
    00
  • Python利用递归实现文件的复制方法

    当我们需要将一个文件夹中的所有文件(包括文件夹)复制到另一个路径下时,可以利用递归实现该功能。 1. 实现文件复制函数 首先我们需要实现一个函数来完成文件的复制。该函数需要传入两个参数,即待复制文件的路径(包括文件夹)和目标路径。 import os import shutil def copy_files(source_dir, target_dir): …

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