python - 保存/加载词典

标签 python python-3.x

我发现有几个其他人在寻求这方面的帮助,但不是我想要做什么。我有一本充满各种格式(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 根本无法抵御黑客攻击。)

关于python - 保存/加载词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541522/

相关文章:

python - ModuleNotFoundError : No module named 'xxx' ; 'xxx' is not a package

python - 如何使用 google docs 将 PDF 内容提取到 .txt 文件中?

python - 如何检查与可以放置在 pygame 中任何位置的对象的碰撞

python - Pandas 应用 Idmax 错误地将混合对象列转换为 float

python - 手动计算字符串的长度

python - 正则表达式 - 如何使行尾可选

php - 从PHP Docker运行Python脚本

python - 无法打开骑行Python27

python - 如何处理脚本语言中的用户认证和错误修改?

python - 如何使用 ElementTree 从深度嵌套的 XML 子元素中提取属性?