json可以很方便的保存文本,如果是二进制数据,完全可以直接使用pickle保存。
本文主要说明通过json保存任意对象的方法
1、定义序列化和反序列化的方法
# 序列化
def serialize_instance(obj):
d = {'__classname__': type(obj).__name__}
d.update(vars(obj))
return d
# 反序列化
def unserialize_object(d):
clsname = d.pop('__classname__', None)
if clsname:
# 需要改进的地方,定义类;也可以通过getattr创建对象
cls = corpora.Dictionary # 测试用的类,可更改为其他类
obj = cls.__new__(cls)
for key, value in d.items():
setattr(obj, key, value)
return obj
else:
return d
2、json保存和加载对象
# 保存对象
with open(path_dictionary, 'w', encoding='utf-8') as f:
json.dump(dictionary, f, default=serialize_instance, indent=4)
# 加载对象
with open(path_dictionary, 'r', encoding='utf8') as f:
dictionary = json.load(f, object_hook=unserialize_object)