【问题标题】:Saving dictionary to file then loading file to edit dictionary将字典保存到文件然后加载文件以编辑字典
【发布时间】:2014-10-24 13:59:22
【问题描述】:

现在我可以使用我的程序创建和编辑字典,但我需要能够将字典变量保存到文件中,然后加载该文件并替换旧字典。

类似这样的:

Dict1={key:value}
Dict2=Dict1

将 Dict2 保存到文件,然后加载文件,以便我可以替换 Dict1

Dict1=Dict2

【问题讨论】:

    标签: python file dictionary


    【解决方案1】:

    使用json! Json 比 eval/pickle 更快更安全。 (顺便说一句,产生的文件比泡菜小) Json 不会执行任何代码(不涉及“魔法”)。

    import json
    
    # Write to file
    d={123:123}
    json.dump(d,open("myfile","w"))
    
    
    # Load from file
    d = json.load(open("myfile","r")
    

    【讨论】:

    • 这是最好的答案。避免了pickle的安全隐患和repr()、eval()的序列化问题
    • 一般情况下是好的,但是字典里面的一些数据结构是不能序列化的。
    • 为了规避这个你可以extend json 序列化器。
    【解决方案2】:

    使用模块pickle

    favorite_color = { "lion": "yellow", "kitty": "red" } 
    pickle.dump( favorite_color, open( "save.p", "wb" ) )
    favorite_color = pickle.load( open( "save.p", "rb" ) )
    

    但请注意,从不安全的来源中提取数据可能会导致安全问题

    【讨论】:

    • 你没有询问他的用例,也没有提到这里的潜在安全风险
    【解决方案3】:

    最简单的方法是这样的:

    f=open("myFile", "w")
    f.write(dict2)
    f.close()
    

    稍后:

    f=open("myFile", "r")
    dict2=eval(f.read())
    f.close()
    

    诀窍在于 dict 的字符串表示(将写入文件)类似于'{ "lion": "yellow", "kitty": "red" }'

    eval() 函数在读取文件后解释这个字符串,因此返回一个 dict 对象。

    但是:请注意:有人可能会用 python-code 替换文件的内容来格式化您的硬盘。如果您对安全性有此类顾虑,最好使用 pickle 之类的东西。

    【讨论】:

    • 比 pickle 更容易破解,而且不那么理智。如果您的字典中有时间元组怎么办?这将失败。
    猜你喜欢
    • 2017-07-14
    • 2020-02-26
    • 1970-01-01
    • 2022-06-27
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多