详解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日

相关文章

  • python生成requirements.txt的两种方法

    下面是对于“python生成requirements.txt的两种方法”的详细讲解。 生成requirements.txt的两种方法 在Python项目中,我们通常需要记录下项目中使用到的依赖包及其版本号,并且这些依赖包的版本可能会随时更新,这时我们就需要使用 requirements.txt 文件来记录依赖包的详细信息。下面介绍两种方法来生成 requir…

    python 2023年5月13日
    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中进行文件操作和异常处理时,需要掌握一些基本的知识点。本文将详细讲解Python中文件操作和异常处理的相关知识点,并提供示例代码进行说明。 文件操作 开文件 在Python中,使用open()函数打开文件。以下是打开文件的示例代码: f = open(‘file.txt’, ‘r’) 在以上代码中,我们使用open()函数打开一个名为fi…

    python 2023年5月13日
    00
  • Python3 列表,数组,矩阵的相互转换的方法示例

    以下是“Python3列表,数组,矩阵的相互转换的方法示例”的完整攻略。 1. 列表、数组、矩阵的概述 在Python中,列表(list)、数组(array)和矩阵(matrix)都是常见的数据类型。它们都可以用来储存多个值,但它们的使用方式和特点有所不同。本攻略将介绍Python中列表、数组、矩阵的相互转换的方法。 2. 列表、数组、矩阵的相互转换的方法 …

    python 2023年5月13日
    00
  • 用Python自动清理系统垃圾的实现

    下面我将为您详细讲解如何用Python自动清理系统垃圾的实现攻略。 确认清理目标和策略 在编写Python清理脚本前,需要确认清理目标和策略。不同的系统和应用程序产生的垃圾文件种类和存放位置可能不同,清理策略也会有所区别。一般情况下,可以从以下方面考虑: 临时文件目录(如/tmp):清理全部或满足一定条件的临时文件。 浏览器缓存目录(如~/.cache/ch…

    python 2023年5月19日
    00
  • 对python list 遍历删除的正确方法详解

    以下是详细讲解“对Python列表遍历删除的正确方法详解”的完整攻略。 在Python中,列表是一种常用的数据类型,可以用来存储一组有序的数据。在对列表进行遍时,有时需要删除其中的元素。本文将介绍对Python列表进行遍历删除的正确方法,并提供两个示例说明。 遍历删除的错误方法 在遍历列表时,有些人会尝试直接删除列表中的元素,例如: lst = [1, 2,…

    python 2023年5月13日
    00
  • 如何使用Python在MySQL中使用时间戳?

    在MySQL中,可以使用时间戳来存储日期和时间信息。在Python中,可以使用MySQL连接来执行时间戳查询。以下是在Python中使用时间戳的完整攻略,包括时间戳的基本语法、使用时间戳的示例以及如何在中使用时间戳。 时间戳的基本语法 在MySQL中,可以使用TIMESTAMP数据类型来存储日期和时间信息。以下是创建TIMESTAMP`列的基本语法: CRE…

    python 2023年5月12日
    00
  • Python接口自动化浅析登录接口测试实战

    Python接口自动化测试是一种自动化测试方法,可以帮助我们更好地测试接口的正确性和稳定性。本文将介绍如何使用Python实现接口自动化测试,并提供一个登录接口测试实战示例。 1. 登录接口测试实战 我们可以使用Python实现登录接口测试。以下是一个示例,演示如何使用Python实现登录接口测试: import requests def test_logi…

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