当前位置: 首页 > article >正文

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语句来打开文件,以确保文件在操作完成后正确关闭。


http://www.kler.cn/a/442341.html

相关文章:

  • 【无法下载github文件】虚拟机下ubuntu无法拉取github文件
  • Linux查看日志命令
  • 3 前端(上): Web开发相关概念 、HTML语法、CSS语法
  • 使用Newtonsoft.Json插件,打包至Windows平台显示不支持
  • vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址
  • vim将一行行尾倒数第三个字符替换成1
  • android 计算CRC
  • Windows开机黑屏|Windows开机黑屏只有鼠标|Windows开机不运行explorer
  • vue3实现商城系统详情页(前端实现)
  • 面试真题 | 虎牙 C++[20241218]
  • 5个小型多模态AI模型及其功能
  • 使用idea创建一个JAVA WEB项目
  • 小程序子组件调用父组件方法、父组件调用子组件方法
  • clion使用说明
  • 环境搭建——CUDA、Python、Pytorch
  • 【jvm】主要参数
  • Vue.js前端框架教程6:Element UI框架
  • EDAC和 MCA检验技术
  • 【Leetcode 每日一题】1847. 最近的房间
  • 【图像处理lec2】matlab的使用
  • CLion Inlay Hints - 取消 CLion 灰色的参数和类型提示
  • 二六(vue2-02)、指令修饰符、v-bind增强、v-model补充、computed、watch、水果购物车
  • 【电源专题】开关转换器使能(EN)和欠压锁定(UVLO)为什么需要回滞?
  • opencv读取和保存图像
  • mcu+cpld 联合编程(概念及流程)
  • 【Python知识】python基础-关于异常处理