详解Python之数据序列化(json、pickle、shelve)

详解Python之数据序列化(json、pickle、shelve)

在Python中,我们经常需要将Python对象序列化为字节数据进行网络传输、存储到文件中等操作。而Python提供了多种序列化方式,包括json、pickle、shelve等。本文将详细讲解这几种序列化方式的使用方法和特点。

JSON

简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它采用易于读写的文本格式,具有良好的可读性和代码可移植性,常用于Web应用程序中。在Python中,我们可以使用json模块进行JSON编解码。

示例

import json

# 将Python对象转换为JSON字符串
my_dict = {"name": "John", "age": 30, "city": "New York"}
json_str = json.dumps(my_dict)
print(json_str)

# 将JSON字符串转换为Python对象
json_str = '{"name": "John", "age": 30, "city": "New York"}'
my_dict = json.loads(json_str)
print(my_dict)

应用场景

JSON序列化是一种通用的序列化方式,适用于大多数的数据结构,特别是字典和列表等Python内置类型。

Pickle

简介

Pickle是Python的一种序列化模块,可以将Python对象序列化到文件或者内存中,也可以将序列化的对象进行反序列化。Pickle序列化的结果是一个字节流,可以存储在文件中,通过解析字节流可以还原Python对象。Pickle提供了更为灵活的序列化方式,不局限于Python内置类型。但是Pickle序列化的结果只能被Python解析,通常不适用于跨平台应用。

示例

import pickle

# 将Python对象序列化到文件中
my_dict = {"name": "John", "age": 30, "city": "New York"}
with open("my_dict.pkl", "wb") as f:
    pickle.dump(my_dict, f)

# 从文件中读取序列化的Python对象
with open("my_dict.pkl", "rb") as f:
    my_dict = pickle.load(f)
    print(my_dict)

# 将Python对象序列化为字节流
my_dict = {"name": "John", "age": 30, "city": "New York"}
bytes_data = pickle.dumps(my_dict)
print(bytes_data)

# 从字节流中反序列化Python对象
my_dict = pickle.loads(bytes_data)
print(my_dict)

应用场景

Pickle序列化方式适用于需要保留对象的完整性、包含自定义类型的对象,以及需要对对象进行深度复制的场景。

Shelve

简介

Shelve模块是Python的一个对象持久化模块,它在Pickle模块基础上,提供了一种key-value的持久化存储方式,可以将Python对象按照key-value的形式保存到文件中,类似于字典的形式。当需要使用Python对象时,可以通过key获取对象,实现对象的反序列化。Shelve模块通常用于简单的数据存储和交互。

示例

import shelve

# 将Python对象序列化并保存到Shelve文件中
my_dict = {"name": "John", "age": 30, "city": "New York"}
with shelve.open("my_db") as db:
    db["my_dict"] = my_dict

# 从Shelve文件中读取Python对象
with shelve.open("my_db") as db:
    my_dict = db["my_dict"]
    print(my_dict)

应用场景

Shelve适用于需要对Python对象进行简单的key-value存储、交互的场景,通常用于轻量级的应用程序。需要注意的是,Shelve最好只在单线程中使用,多线程下可能存在问题。

总结

本文介绍了Python中常用的三种序列化方式:JSON、Pickle、Shelve。JSON是一种通用的序列化方式,适用于大多数的数据结构;Pickle提供了更为灵活的序列化方式,适用于需要保留对象的完整性、包含自定义类型的对象,以及需要对对象进行深度复制的场景;Shelve适用于需要对Python对象进行简单的key-value存储、交互的场景。通过选择不同的序列化方式,我们可以灵活地应对不同的数据序列化需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python之数据序列化(json、pickle、shelve) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • python3 unicode列表转换为中文的实例

    下面是关于“Python3 Unicode列表转换为中文”的完整攻略: 问题描述 在Python3中,经常会碰到将Unicode编码的列表转换成中文字符串的需求,如何实现? 解决方案 要将Unicode编码的列表转换成中文字符串,我们可以利用Python中的内置函数chr(),它可以将Unicode编码转换成相应的字符。 具体的实现步骤如下: 定义Unico…

    python 2023年5月31日
    00
  • python中精确输出JSON浮点数的方法

    在Python中,使用json模块将Python对象转换为JSON字符串时,浮点数默认会使用科学计数法表示,并且只保留小数点后15位。如果需要精确输出JSON浮点数,可以使用decimal模块来处理浮点数,并使用json.dumps()函数的cls参数来指定一个自定义的编码器类。以下是“Python中精确输出JSON浮点数的方法”的完整攻略: 导入模块 首先…

    python 2023年5月14日
    00
  • 详解python爬虫系列之初识爬虫

    详解Python爬虫系列之初识爬虫 Python爬虫是一种自动化程序,用于从互联网上获取数据。Python爬虫可以自动化地访问网站抓取数据、解析数据、存储数据等。本文将介绍Python爬虫的基本概念、工作原理、以及两个示例说明。 1. Python爬虫的基本概念 Python爬虫是一种自动化程序,用于从互联网上获取数据。Python爬虫可以自动化地访问网站、…

    python 2023年5月13日
    00
  • python正则表达式及使用正则表达式的例子

    Python正则表达式及使用正则表达式的例子 正则表达式是一种用于描述字符串模式的语言,可以用于配、查找、替换和分割。在Python中,可以使用re模块使用正则表达式。本攻略将详细介绍Python中正则表达式的语法、字符集、转义字符以及常用函数,并提供两个示例说明。 正则表达式语法 正则表达式由普通字符和元字符组成,普通字符表示本身,而元字符有特殊的含义。下…

    python 2023年5月14日
    00
  • 对python读取zip压缩文件里面的csv数据实例详解

    在这里我将为你详细讲解“对Python读取zip压缩文件里面的CSV数据实例详解”的完整攻略,包含以下步骤和两条示例说明: 1. Python读取zip压缩文件里面的CSV数据攻略 1.1 导入模块 import zipfile import csv 1.2 读取zip文件 with zipfile.ZipFile(‘example.zip’) as myz…

    python 2023年6月3日
    00
  • python实现层次聚类的方法

    Python 实现层次聚类的方法可以分为以下几个步骤: 1. 数据预处理 首先需要对数据进行处理,特别是需要将文本数据转化为数值型数据,以便于聚类算法的执行。可以使用各种文本特征提取技术来实现。 2. 选择合适的距离度量 距离度量是衡量两个样本之间的差异程度的方法。在层次聚类中,比较常用的距离度量包括欧几里得距离、曼哈顿距离、余弦距离等。选择何种距离度量策略…

    python 2023年5月13日
    00
  • python矩阵/字典实现最短路径算法

    Python中实现最短路径算法可以使用矩阵和字典两种方式,下面将逐一详细讲解这两种实现方式。 使用矩阵实现最短路径算法 简介 矩阵是将图中各个节点之间的距离存储下来的方式,通常使用二维数组来实现。我们将从以下几个方面来讲解使用矩阵实现最短路径算法: 如何初始化一个矩阵; 如何使用矩阵实现Dijkstra算法; 如何输出最短路径。 1. 初始化矩阵 假设我们有…

    python 2023年6月5日
    00
  • Python functools模块学习总结

    Python functools模块学习总结 简介 functools模块是Python标准库中的模块,提供了一些底层工具,用于高级函数的实现。这些工具可以方便地扩展和修改现有的函数或者实现新的高阶函数,使代码更加简洁易懂、高效、可读性更强。 常用函数 1. partial函数的使用 functools.partial函数可以用来为一个函数创建一个新的、固定…

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