当前位置:首页 > 科技  > 软件

探索 Python中 序列化与反序列化

来源: 责编: 时间:2023-12-13 17:01:12 359观看
导读在Python编程中,序列化与反序列化是处理数据的重要概念。序列化是将数据转换为可存储或传输的格式,而反序列化则是将存储或传输的数据重新转换为程序内部的数据结构。Python提供了许多内置模块来执行这些任务,其中最常用

在Python编程中,序列化与反序列化是处理数据的重要概念。序列化是将数据转换为可存储或传输的格式,而反序列化则是将存储或传输的数据重新转换为程序内部的数据结构。Python提供了许多内置模块来执行这些任务,其中最常用的是JSON和Pickle模块。本文将深入探讨JSON和Pickle模块,详细介绍它们的用法、区别以及最佳实践,帮助更好地理解和应用序列化与反序列化的概念。x6D28资讯网——每日最新资讯28at.com

序列化与反序列化是Python中处理数据的关键概念。在介绍JSON和Pickle模块之前,让我们先了解一下什么是序列化与反序列化。x6D28资讯网——每日最新资讯28at.com

x6D28资讯网——每日最新资讯28at.com

一、什么是序列化与反序列化?

序列化是将数据转换为可存储或传输的格式的过程。它将数据转换为字节流或文本字符串,以便在存储到文件或通过网络传输时使用。反序列化则是将序列化的数据重新转换为程序内部的数据结构。这两个过程对于数据的持久化和跨平台通信至关重要。x6D28资讯网——每日最新资讯28at.com

二、为何要序列化

为什么要序列化,方便数据传输,不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串。(比如Python的一个列表[1, 2, 3]利用json转化成特殊的字符串,然后再编码成bytes发送给php的开发者,php的开发者就可以解码成特殊的字符串,然后再反解成原数组(列表): [1, 2, 3])。每种语言都有自己的数据结构,为了方便数据传输,所以需要序列化,网络数据传输过程中最常用的数据结构是json。x6D28资讯网——每日最新资讯28at.com

序列化得到结果,也就是特定的格式的内容有两种用途:x6D28资讯网——每日最新资讯28at.com

  • 可用于存储,用于存档
  • 传输给其他平台使用,跨平台数据交互

x6D28资讯网——每日最新资讯28at.com

三、json常用方法

当谈到 JSON(JavaScript Object Notation)模块时,通常是指 Python 中的 json 模块。这个模块提供了处理 JSON 数据的方法,包括加载(load)、加载字符串(loads)、转储(dump)和转储字符串(dumps)等操作。下面是关于这四个方法的详细示例代码:x6D28资讯网——每日最新资讯28at.com

1.load 方法

用于从文件中读取 JSON 数据,并将其解析为 Python 对象。x6D28资讯网——每日最新资讯28at.com

import json# 从 JSON 文件中加载数据with open('data.json', 'r') as file:    data = json.load(file)# 打印加载的数据print(data)

x6D28资讯网——每日最新资讯28at.com

2.loads 方法

用于将 JSON 字符串解析为 Python 对象。x6D28资讯网——每日最新资讯28at.com

import json# JSON 字符串json_str = '{"name": "John", "age": 30, "city": "New York"}'# 将 JSON 字符串加载为 Python 对象data = json.loads(json_str)# 打印加载的数据print(data)

x6D28资讯网——每日最新资讯28at.com

3.dump 方法

用于将 Python 对象转储到文件中,将 Python 对象序列化为 JSON 格式并写入文件。x6D28资讯网——每日最新资讯28at.com

import json# Python 对象data = {"name": "John", "age": 30, "city": "New York"}# 将数据转储到 JSON 文件with open('output.json', 'w') as file:    json.dump(data, file)

x6D28资讯网——每日最新资讯28at.com

4.dumps 方法

用于将 Python 对象转储为 JSON 字符串。x6D28资讯网——每日最新资讯28at.com

import json# Python 对象data = {"name": "John", "age": 30, "city": "New York"}# 将数据转储为 JSON 字符串json_str = json.dumps(data)# 打印生成的 JSON 字符串print(json_str)

如何使用 load、loads、dump 和 dumps 四个方法。但你可以根据需要进行修改和扩展。这些方法在处理 JSON 数据时非常有用,可以轻松地在 Python 对象和 JSON 之间进行转换。x6D28资讯网——每日最新资讯28at.com

四、序列化与反序列化

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。在Python中,可以使用json模块进行JSON格式的序列化和反序列化。如下图所示:x6D28资讯网——每日最新资讯28at.com

x6D28资讯网——每日最新资讯28at.com

插入一张图片x6D28资讯网——每日最新资讯28at.com

1. 使用json模块

JSON序列化示例:x6D28资讯网——每日最新资讯28at.com

import jsondata = {'name': 'Alice', 'age': 30, 'city': 'New York'}# 将Python对象序列化为JSON格式的字符串json_string = json.dumps(data)print(json_string)

JSON反序列化示例:x6D28资讯网——每日最新资讯28at.com

import jsonjson_string = '{"name": "Alice", "age": 30, "city": "New York"}'# 将JSON格式的字符串反序列化为Python对象python_obj = json.loads(json_string)print(python_obj)

2. 使用Pickle模块

Pickle模块是Python中用于序列化和反序列化数据的模块,与JSON不同,Pickle可以处理几乎所有Python数据类型。它的序列化形式不可读,但更适合于Python特定对象的持久化。x6D28资讯网——每日最新资讯28at.com

Pickle序列化示例:x6D28资讯网——每日最新资讯28at.com

import pickledata = {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}# 将Python对象序列化为字节流pickle_bytes = pickle.dumps(data)print(pickle_bytes)

Pickle反序列化示例:x6D28资讯网——每日最新资讯28at.com

import picklepickle_bytes = b'/x80/x04/x95/x17/x00/x00/x00/x00/x00/x00/x00}/x94(/x8c/x04name/x94/x8c/x03Bob/x94/x8c/x03age/x94K/x19/x8c/x04city/x94/x8c/x0fSan Francisco/x94u.'# 将字节流反序列化为Python对象python_obj = pickle.loads(pickle_bytes)print(python_obj)

总结

本文介绍了Python中序列化与反序列化的概念,并深入探讨了JSON和Pickle两个常用模块的用法。JSON适用于简单数据结构的序列化和反序列化,而Pickle则更适用于Python特定对象的处理。选择使用JSON还是Pickle取决于需求和数据类型。序列化和反序列化是数据处理中必不可少的技术,在实际应用中,选择合适的模块和方法可以更好地管理和处理数据。x6D28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-44375-0.html探索 Python中 序列化与反序列化

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Elasticsearch与文件描述符的恩恩怨怨

下一篇: 改善代码质量,试试这十种方法

标签:
  • 热门焦点
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 小米MIX Fold 3配置细节曝光:搭载领先版骁龙8 Gen2+罕见5倍长焦

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
Top