| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- """序列化工具"""
- 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)
|