跳转至

Python序列化

在Python中,序列化是将对象转换为可存储或传输的格式的过程,通常是将对象转换为字节流或字符串形式,以便于存储到文件或发送到网络。反序列化则是将这些存储或传输的数据重新转换为对象的过程。

Python提供了多种内置的序列化和反序列化方法,下面将介绍两种常用的方式:使用 pickle 模块和使用 json 模块。

1. 使用 pickle 模块进行序列化和反序列化

pickle 模块用于序列化和反序列化Python对象,可以将任意复杂的Python对象转换为字节流,也可以从字节流反序列化恢复成原始对象。

1.1 序列化示例

import pickle

# 定义一个字典对象
data = {'name': 'Alice', 'age': 30, 'city': 'New York'}

# 将对象序列化为字节流
serialized_data = pickle.dumps(data)

# 将字节流写入文件
with open('data.pickle', 'wb') as f:
    f.write(serialized_data)

1.2 反序列化示例

import pickle

# 从文件中读取字节流
with open('data.pickle', 'rb') as f:
    serialized_data = f.read()

# 将字节流反序列化为Python对象
data = pickle.loads(serialized_data)

print(data)  # 输出: {'name': 'Alice', 'age': 30, 'city': 'New York'}

2. 使用 json 模块进行序列化和反序列化

json 模块用于序列化和反序列化JSON格式的数据,适用于存储和交换数据。JSON是一种轻量级的数据交换格式,通常用于跨平台数据传输。

2.1 序列化示例

import json

# 定义一个字典对象
data = {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}

# 将对象序列化为JSON格式的字符串
serialized_data = json.dumps(data)

# 将JSON字符串写入文件
with open('data.json', 'w') as f:
    f.write(serialized_data)

2.2 反序列化示例

import json

# 从文件中读取JSON字符串
with open('data.json', 'r') as f:
    serialized_data = f.read()

# 将JSON字符串反序列化为Python对象
data = json.loads(serialized_data)

print(data)  # 输出: {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}

注意事项

  • pickle 序列化的数据只能在Python环境中使用,并且可能存在安全风险,因此不推荐用于处理不受信任的数据。
  • json 序列化产生的数据格式通用性更好,可以被多种编程语言和平台识别和处理。

选择序列化方法时,应根据具体需求和数据类型选择合适的工具。通常来说,如果需要跨平台或与其他语言交互,推荐使用 json 序列化;如果仅在Python环境中使用,且不涉及不受信任的数据,pickle 也是一个方便有效的选择。

评论