我有一个相当独特的案例,我的 Python 程序生成了大量动态代码(例如动态生成的类和 lambda),并且它需要使用 Pickle 保存其状态。我想尽可能多地保存,但无法保存不可腌制的对象也是可以接受的。
换句话说,我希望能够通过简单地为每个执行 del mydict[unpickleablekey]
来 pickle dict mydict
,它包含一些不可 pickleable 的对象不可腌制的对象。
实现它的最简单和最 Pythonic 的方法是什么?
最佳答案
我在尝试使用无法 pickle 的实例序列化 JSON 时遇到了类似的问题。我编写了一个自定义 JSON 编码器,它可能对您的情况有所帮助。
from json import JSONEncoder
class JsonEncoder(JSONEncoder):
def default(self, obj):
return repr(obj)
然后你会像这样使用它:
encoded_dict = JsonEncoder().encode(mydict)
with open('dump.pkl', 'w') as f:
pickle.dump(encoded_dict, f)
回读:
import json
with open('dump.pkl', 'r') as f:
decoded_dict = json.loads(pickle.load(f))
需要注意的一点是,使用 repr 对值进行编码会导致诸如整数或浮点值之类的值将转换为字符串表示形式,而不是真正的类型。如果类型不是 int、float 等,则可以增强默认编码器以仅返回 repr...
关于python - 酸洗时忽略不可酸洗的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31688025/