说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的序列化是将对象转换为字节流的过程,以便可以将其存储在文件中或通过网络传输。反序列化则是将字节流转换回对象的过程。在 Python 中,常见的序列化模块包括 pickle、json 和 marshal。下面详细介绍这些模块及其使用方法。
pickle 模块用于将 Python 对象序列化为二进制格式。它支持几乎所有 Python 数据类型。
导入模块
import pickle
序列化对象
# 创建一个示例对象
data = {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
# 序列化对象并写入文件
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)
# 输出: {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
序列化为字节流
# 序列化对象为字节流
byte_data = pickle.dumps(data)
# 反序列化字节流为对象
loaded_data = pickle.loads(byte_data)
print(loaded_data)
# 输出: {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
json 模块用于将 Python 对象序列化为 JSON 格式的字符串。它适用于基本数据类型如字典、列表、字符串、数字等。
导入模块
import json
序列化对象
# 创建一个示例对象
data = {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
# 序列化对象为 JSON 字符串
json_data = json.dumps(data)
print(json_data)
# 输出: '{"name": "Alice", "age": 25, "score": [85, 90, 88]}'
# 写入文件
with open('data.json', 'w') as file:
json.dump(data, file)
反序列化对象
# 从 JSON 字符串反序列化对象
loaded_data = json.loads(json_data)
print(loaded_data)
# 输出: {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
# 从文件中读取并反序列化对象
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
# 输出: {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
marshal 模块用于将 Python 对象序列化为二进制格式,但它主要用于 Python 自身的目的,如编译 .pyc 文件。与 pickle 相比,marshal 更快,但不支持所有 Python 数据类型。
导入模块
import marshal
序列化对象
# 创建一个示例对象
data = {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
# 序列化对象为二进制数据
byte_data = marshal.dumps(data)
# 写入文件
with open('data.marshal', 'wb') as file:
file.write(byte_data)
反序列化对象
# 从二进制数据反序列化对象
loaded_data = marshal.loads(byte_data)
print(loaded_data)
# 输出: {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
# 从文件中读取并反序列化对象
with open('data.marshal', 'rb') as file:
byte_data = file.read()
loaded_data = marshal.loads(byte_data)
print(loaded_data)
# 输出: {'name': 'Alice', 'age': 25, 'score': [85, 90, 88]}
pickle:
json:
marshal:
根据不同的需求选择合适的序列化方法。例如,如果需要与其他系统交换数据,通常使用 json。如果需要在 Python 内部持久化对象,通常使用 pickle。
更新时间:2024-06-23 08:12:42 标签:python io 序列化