【问题标题】:my function save to pickle not working我的功能保存到泡菜不起作用
【发布时间】:2018-05-16 02:48:11
【问题描述】:

我有一个脚本,它调用下面的函数来从 pickle 加载创建一个字典,如下所示:

def load_obj(name ):
    try:
        with open('obj/' + name + '.pkl', 'rb') as f:
            return pickle.load(f)
    except:
        return dict(name)

我更新了 pickle 加载的 dict 以添加一个新的 key:value 记录,然后使用这个函数保存 pickle:

def save_obj(obj, name ):
    pathlib.Path('.obj').mkdir(exist_ok=True)
    with open('.obj/'+ name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)

我的意图是从 pickle 加载创建一个 dict,向 dict 添加一个新的 key:value 并保存 pickle。如果密钥已经在 pickle 加载的字典中,我就通过了。我的问题是 save_obj 似乎没有将更新的字典保存到泡菜中。我肯定错过了一些东西。任何帮助,将不胜感激。 在我的测试中,我可以看到加载时dict的长度为1919,添加新记录后的dict长度为1920。

【问题讨论】:

    标签: python python-3.x pickle


    【解决方案1】:

    您正在正确添加和保存所有内容。但是,您不会以加载文件的相同名称保存文件。您加载文件obj/test.pkl,然后将其保存为.obj/test.pkl。我的猜测是您尝试在此处使用当前目录符号,因此将每个 obj/.obj/ 更改为 ./obj/。还要检查您的文件系统中所有目录和文件名的名称。

    【讨论】:

    • 你找到了...... load_obj 函数我将子目录标注为“obj”,但在 save_obj 上标注“.obj/”,我刚刚删除了“.”,一切都开始按预期工作. 但我不知道为什么会这样
    • 太棒了。很高兴我能帮上忙!
    猜你喜欢
    • 2021-12-30
    • 2010-10-20
    • 1970-01-01
    • 2021-04-15
    • 2023-04-07
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多