python库pickle
时间: 2024-12-29 11:26:53 浏览: 7
### Python `pickle` 库概述
Python 的 `pickle` 模块实现了二进制协议,用于序列化和反序列化 Python 对象结构。这使得复杂的数据结构能够被转换成字节流,并存储于磁盘或通过网络传输,在之后又可以从这些字节流恢复回原始的对象形式[^2]。
#### 基本操作函数
- **序列化(Dumping)**: 将对象转储为文件或将对象转化为由bytes表示的字符串。
```python
import pickle
example_dict = { "a": 1, "b": 2 }
with open('example_dict.pkl', 'wb') as file:
pickle.dump(example_dict, file)
serialized_data = pickle.dumps(example_dict) # 转换为 bytes 字符串
```
- **反序列化(Loading)**: 从文件读取并重构之前保存过的对象,或是直接从bytes类型的字符串中解析出对象。
```python
import pickle
with open('example_dict.pkl', 'rb') as file:
loaded_dict = pickle.load(file)
deserialized_data = pickle.loads(serialized_data) # 从 bytes 解析
```
#### 处理异常情况
当尝试序列化不可支持的对象类型时会引发特定错误:
- 如果遇到无法序列化的对象,则会发生 `PicklingError` 异常;
- 若是在解码过程中出现问题,则可能会触发 `UnpicklingError` 错误[^5]。
#### 实际应用案例
考虑一个更复杂的场景——持久化自定义类实例:
```python
import pickle
class MyClass(object):
def __init__(self, value):
self.value = value
obj = MyClass(42)
with open('my_class_instance.pkl', 'wb') as output_file:
pickle.dump(obj, output_file)
# 加载已保存的对象
with open('my_class_instance.pkl', 'rb') as input_file:
restored_obj = pickle.load(input_file)
print(restored_obj.value) # 输出: 42
```
此代码片段展示了如何创建一个简单的类并将其实例保存到文件中,随后再次加载该实例以验证其状态保持不变[^4]。
阅读全文