python 序列化和反序列化

一、什么是数据序列化与反序列化
数据序列化(Serialization) :是指将数据结构或对象转换为可存储或传输的格式的过程。这通常涉及将数据转换为字节流或字符串,以便它们可以在不同的环境中传递或存储。

数据反序列化(Deserialization) :是将序列化后的数据还原为原始数据结构或对象的过程。允许在接收端或将来的时间点重新使用数据。

二、python 中常用的序列化放序列换方式
2.1、介绍
python 自带了两个内置库(json和pickle)实现序列化和反序列化操作, 本文只介绍json方式
2.2、json方式实现序列化和反序列化
介绍
通过文件操作,我们可以将字符串写入到一个本地文件当中,但是,如果是一个对象(例如字典、元组、列表等),就无法直接写到一个文件里,需要对这个对象进行序列化,然后写入到文件里。

设计一套协议,按照某种规则,把python对象转变成json字符串,这就是序列化,
dumps(python_obj)方法的序列化是把python对象序列化为byte对象
dump(python_obj,fp)方法的序列化是把python对象序列化到文件对象,就是存入文件

反之,把json格式的字符串转变成python对象,就是反序列化。
loads(json_string)方法是把json格式的字符串(byte对象)反序列化为python对象
注意:确保json_string是合法的JSON格式,否则json.loads()会抛出json.JSONDecodeError异常。

load(fp)方法是把json格式的字符串(文件对象中的json格式字符串)读取成为python对象
注意:确保文件中的内容是合法的JSON格式,否则json.loads()会抛出json.JSONDecodeError异常。


# JSON模块
JSON(JavaScriptObjectNotation,js对象简称)是一种轻量级的数据交换标准,JSON的本质是字符串。

示例序列化操作

使用JSON实现序列化
JSON 提供了dump和dumps方法,将一个对象进行序列化。
dumps方法的作用是把对象转换成为字符串,它本身不具备将数据写入到文件的功能。


# 默认情况下只能将字符串写入文件中
# fp = open('test.txt', 'w')
# fp.write('hello world')
# fp.close()

# 将对象写入文件中  序列化
# 序列化的两种方式 dump()  dumps()
# (1) dumps()方法
# 1、创建一个文件
# fp = open('test.txt', 'w')
#
# # 2、定义一个列表对象
# name_list = ['zs', 'ls']
#
# # 3、导入json模块
# import json
#
# # 4、序列化
# names = json.dumps(name_list)
# print(names)
# print(type(names))   # 列表已经被序列化成字符串
#
# # 5、将names 写入到文件中
# fp.write(names)
# fp.close()


# (2)dump()方法
# 在将对象转换为字符串的同时,指定一个文件的对象 然后把转换后的字符串写入到这个文件里
# # 1、创建一个文件
# fp = open('test.txt', 'w')
#
# # 2、定义一个列表对象
# name_list = ['zs', 'ww']
#
# # 3、导入json模块
# import json
#
# # 4、序列化并同时写入到文件
# json.dump(name_list, fp)
# fp.close()

示例反序列化操作

# 反序列化  将json格式的字符串 变成一个python对象
# load()   loads()  两个方法


# loads() 方法
# fp = open('test.txt', 'r')
# content = fp.read()
# print(type(content))
#
# import json
# # 将content 字符串 进行反序列化
# result = json.loads(content)
# print(result)
# print(type(result))


# load() 方法
fp = open('test.txt', 'r')

import json
result = json.load(fp)
print(result)

# load 直接 加载的是文件,不像 loads 加载的是字符串,所以要关闭文件
fp.close()
posted @   有形无形  阅读(64)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示