python IO编程:序列化

在Python的IO编程中,序列化(Serialization)是指将数据结构或对象转换为一种格式(如JSON、XML、二进制等),以便可以将其保存到磁盘、通过网络传输或存储在内存中。反序列化(Deserialization)则是将这种格式转换回原始的数据结构或对象。

Python提供了多种序列化方法,其中最常见的是使用pickle模块进行二进制序列化,以及使用json模块进行JSON格式的序列化。

使用pickle进行序列化

pickle模块可以将Python对象序列化为字节流,并且可以从字节流中反序列化回Python对象。

示例:使用pickle
复制代码

python复制代码

|---|----------------------------------------|
| | import pickle |
| | |
| | # 定义一个简单的数据结构 |
| | data = { |
| | 'name': 'Alice', |
| | 'age': 30, |
| | 'is_student': False, |
| | 'courses': ['Math', 'Science'] |
| | } |
| | |
| | # 序列化数据为字节流 |
| | with open('data.pkl', 'wb') as file: |
| | pickle.dump(data, file) |
| | |
| | # 从字节流中反序列化数据 |
| | with open('data.pkl', 'rb') as file: |
| | loaded_data = pickle.load(file) |
| | |
| | print(loaded_data) |

使用json进行序列化

json模块可以将Python数据结构(主要是字典和列表)序列化为JSON格式的字符串,并且可以从JSON字符串中反序列化回Python数据结构。

示例:使用json
复制代码

python复制代码

|---|------------------------------------------------------------|
| | import json |
| | |
| | # 定义一个简单的数据结构 |
| | data = { |
| | 'name': 'Alice', |
| | 'age': 30, |
| | 'is_student': False, |
| | 'courses': ['Math', 'Science'] |
| | } |
| | |
| | # 序列化数据为JSON格式的字符串 |
| | json_data = json.dumps(data, indent=4) # indent=4 用于美化输出 |
| | print(json_data) |
| | |
| | # 将JSON格式的字符串写入文件 |
| | with open('data.json', 'w') as file: |
| | file.write(json_data) |
| | |
| | # 从文件中读取JSON格式的字符串并反序列化 |
| | with open('data.json', 'r') as file: |
| | loaded_data = json.loads(file.read()) |
| | |
| | print(loaded_data) |

注意

  1. 安全性 :pickle模块可以序列化几乎所有的Python对象,但这也意味着它可能执行不安全的代码,特别是当反序列化不可信的数据时。因此,在处理不可信的数据源时,应避免使用pickle,而使用更安全的序列化格式,如JSON。

  2. 兼容性:JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但是JSON是独立于语言的,并且很多编程语言都支持JSON格式。这使得JSON成为一种非常流行的跨平台数据交换格式。

  3. 性能 :pickle通常比json更快,并且能够序列化更复杂的数据结构。然而,对于需要在不同编程语言之间交换数据的场景,JSON通常是更好的选择。

  4. 文件操作 :在序列化数据时,应始终使用with语句来打开文件,以确保文件在操作完成后正确关闭。

相关推荐
GIS数据转换器19 分钟前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
Wang's Blog5 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿6 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河6 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年6 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Williamtym6 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
DongQiShanRen7 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CS创新实验室7 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python
CCblandy7 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
quantdash_cc7 小时前
Pandas 处理分钟级股票行情:从原始数据清洗到 K 线聚合
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash