agent / backend /backend_app /helloAgents /utils /serialization.py
Toadied's picture
2312
8b383ad verified
Raw
History Blame Contribute Delete
1.65 kB
"""序列化工具"""
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)