酸洗时忽略不可酸洗的对象

2024-05-23 16:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常独特的例子,我的Python程序生成大量的动态代码(比如动态生成的类和lambda),它需要用Pickle保存状态。我想尽可能多地保存,但不能保存不可复制的对象是可以接受的。你知道吗

换句话说,我希望能够通过对每个不可pickle对象执行del mydict[unpickleablekey]来pickle dictmydict,它包含一些不可pickle对象。你知道吗

实现这一点的最简单和最python的方法是什么?你知道吗


Tags: 对象方法lambda代码程序状态动态pickle
1条回答
网友
1楼 · 发布于 2024-05-23 16:49:58

在尝试用无法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。。。你知道吗

相关问题 更多 >