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

标签 python python-3.x serialization

我有一个相当独特的案例,我的 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/

相关文章:

linq-to-sql - LINQ to SQL 中的 ScriptIgnore

Python 和 matplotlib 绘制超出域的点,曲线拟合较差

python - 文件选择器打开时无需单击子窗口上的按钮

python - 让 python 脚本运行一分钟

python - pandas 首次尝试线程化

python-3.x - 如何使用 matplotlib 保存图像而不显示它们?

json - Spring Boot 中同一实体的多个自定义序列化程序

c# - 类似于 Json.Net 可以做的 XML 序列化

python - tensorflow tf.edit_distance 需要解释吗?

python-3.x - Google 文本转语音 API 音调调整