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

yizhihongxing

详解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字符串str和json格式相互转换

    Python字符串和json格式之间的转换是开发中非常常见的需求。在Python中,json模块提供了可以将json数据转换为Python数据结构的方法,而Python中的字符串可以通过操作符和方法进行转换。 字符串转为json 将Python字符串转化为json格式需要使用json模块的loads函数。 import json str_data = ‘{&…

    python 2023年6月3日
    00
  • Python调用graphviz绘制结构化图形网络示例

    Python调用graphviz绘制结构化图形网络是一种常用的数据可视化方法。本文将详细讲解如何使用Python调用graphviz绘制结构化图形网络,并提供两个示例说明。 安装graphviz 首先需要安装graphviz,可通过以下命令安装: # Linux系统: $ sudo apt-get install graphviz # Windows系统: …

    python 2023年5月18日
    00
  • 详解Python中列表和元祖的使用方法

    以下是“详解Python中列表和元组的使用方法”的完整攻略。 1. 列表和元组的定义 列表和元组都是Python中的内置数据类型,用于存储一组有序。列表是可变的,可以通过添加、删除和修改元素来改变其内容。元组是不可变的,一旦创建就不能修改内容。 2. 列表的使用方法 2.1 创建列表 列表可以通过方括号[]或list()函数来创建。 my_list = [1…

    python 2023年5月13日
    00
  • Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】

    下面是关于Python HTML解析器BeautifulSoup用法实例详解的攻略: 简介 解析HTML是Python爬虫中非常重要的一步,因为HTML文本中包含着我们需要的数据。而Python HTML解析器BeautifulSoup就是一个实现HTML文本解析的工具库,在爬虫中被广泛使用。 BeautifulSoup可以从多个维度去解析HTML文本,比如…

    python 2023年5月13日
    00
  • Python中利用pyqt5制作指针钟表显示实时时间(指针时钟)

    让我为你详细讲解一下如何在 Python 中使用 PyQt5 库制作指针时钟显示实时时间。 1. 创建 Qt 应用程序 首先,需要导入 PyQt5 库和系统时间模块,然后创建一个 Qt 应用程序。 import sys import datetime from PyQt5.QtWidgets import QApplication, QWidget from…

    python 2023年6月2日
    00
  • Python中集合创建与使用详解

    下面是关于Python中集合创建与使用的详细攻略,包含两个示例说明。 集合的定义 在Python中,集合是一种无序、不重复的数据类型,它是由对花括号{}包裹的元素组成,每个素之间用逗号,`分隔。集合中的元素可以是任何可变的类型,包括数字、字符串、元组等。 集合的创建 在Python中,我们可以使用set()函数或者直接使用括号{}`来创建一个集合。下面是一些…

    python 2023年5月13日
    00
  • Python教程之基本运算符的使用(上)

    当然,我很乐意为您提供详细的Python基本运算符攻略。 标题 作为一个好的文章,我们首先需要添加几个标题,以便读者能够更好地理解和找到自己感兴趣的部分: 一、Python教程之基本运算符的使用(上) 1.1 算术运算符 1.2 比较运算符 1.3 赋值运算符 1.4 逻辑运算符 1.5 位运算符 1.6 成员运算符 1.7 身份运算符 正文 现在我们进入正…

    python 2023年5月30日
    00
  • Selenium 使用 Python – Geckodriver 可执行文件需要在 PATH 中

    【问题标题】:Selenium using Python – Geckodriver executable needs to be in PATHSelenium 使用 Python – Geckodriver 可执行文件需要在 PATH 中 【发布时间】:2023-04-03 01:30:01 【问题描述】: 我是编程新手,大约两个月前开始使用 Pytho…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部