| """序列化工具""" |
|
|
| import json |
| import pickle |
| from typing import Any, Union |
| from pathlib import Path |
|
|
| def serialize_object(obj: Any, format: str = "json") -> Union[str, bytes]: |
| """ |
| 序列化对象 |
| |
| Args: |
| obj: 要序列化的对象 |
| format: 序列化格式 ("json" 或 "pickle") |
| |
| Returns: |
| 序列化后的数据 |
| """ |
| if format == "json": |
| return json.dumps(obj, ensure_ascii=False, indent=2) |
| elif format == "pickle": |
| return pickle.dumps(obj) |
| else: |
| raise ValueError(f"不支持的序列化格式: {format}") |
|
|
| def deserialize_object(data: Union[str, bytes], format: str = "json") -> Any: |
| """ |
| 反序列化对象 |
| |
| Args: |
| data: 序列化的数据 |
| format: 序列化格式 |
| |
| Returns: |
| 反序列化后的对象 |
| """ |
| if format == "json": |
| return json.loads(data) |
| elif format == "pickle": |
| return pickle.loads(data) |
| else: |
| raise ValueError(f"不支持的反序列化格式: {format}") |
|
|
| def save_to_file(obj: Any, filepath: Union[str, Path], format: str = "json") -> None: |
| """保存对象到文件""" |
| filepath = Path(filepath) |
| data = serialize_object(obj, format) |
| |
| mode = "w" if format == "json" else "wb" |
| with open(filepath, mode) as f: |
| f.write(data) |
|
|
| def load_from_file(filepath: Union[str, Path], format: str = "json") -> Any: |
| """从文件加载对象""" |
| filepath = Path(filepath) |
| mode = "r" if format == "json" else "rb" |
| |
| with open(filepath, mode) as f: |
| data = f.read() |
| |
| return deserialize_object(data, format) |