Skip to main content
 首页 » 编程设计

python之保存/加载词典

2025年05月04日1052php

我发现有几个其他人在寻求这方面的帮助,但不是我想要做什么。我有一本充满各种格式(int、str、bool 等)的字典,我正在尝试保存它以便稍后加载它。这是代码的基本版本,没有与此无关的所有额外陷阱。

petStats = { 'name':"", 'int':1, 'bool':False } 
 
def petSave(pet): 
    with open(pet['name']+".txt", "w+") as file: 
        for k,v in pet.items(): 
            file.write(str(k) + ':' + str(v) + "\n") 
 
def digimonLoad(petName): 
    dStat = {} 
    with open(petName+".txt", "r") as file: 
        for line in file: 
            (key, val) = line.split(":") 
            dStat[str(key)] = val 
    print(petName,"found. Loading",petName+".") 
    return dStat 

简而言之,我只是通过在每行上保存一个带有 Key:Value 的文本文件来强制执行它,然后在加载时将它们全部拆分回来。不幸的是,这将我所有的 int 和 bool 都变成了字符串。有没有我可以用来保存字典的文件格式(我不需要能够阅读它,但方便会很好),我可以很容易地加载回去?

这适用于基本字典,但如果我开始添加诸如数组之类的东西,它就会失控。

请您参考如下方法:

使用pickle。这是标准库的一部分,因此您只需导入它即可。

import pickle 
 
pet_stats = {'name':"", 'int':1, 'bool':False} 
 
def pet_save(pet): 
    with open(pet['name'] + '.pickle', 'wb') as f: 
        pickle.dump(pet, f, pickle.HIGHEST_PROTOCOL) 
 
def digimon_load(pet_name): 
    with open(pet_name + '.pickle', 'rb') as f: 
        return pickle.load(f) 

Pickle 适用于比 JSON 更多的数据类型,并自动将它们加载为正确的 Python 类型。 (有一些方法可以用 JSON 保存更多类型,但它需要更多的工作。)如果你需要输出是人类可读的,或者需要与非 Python 程序共享它,JSON(或 XML)更好,但两者都没有出现对您的用例是必要的。泡菜最简单。

如果您需要查看文件中的内容,只需使用 Python 或加载它即可

python -m pickle foo.pickle 

而不是文本编辑器。 (仅对来自您信任的来源的 pickle 文件执行此操作,pickle 根本无法抵御黑客攻击。)