将字典保存到pickle文件还是写入文件?

5

我有一个Python脚本,返回一个字典,我想将其存储在某个地方以便在更大的项目中使用(该脚本运行缓慢,因此我不想每次需要字典时都导入脚本)。

这个字典很小,所以我看到两个选择。我可以:

  1. Save the dict to a pickle file
  2. Write the dict as a literal to a new .py file, like so:

    my_dict = slow_func()
    with open('stored_dict.py', 'w') as py_file:
        file_contents = 'stored_dict = ' + str(my_dict)
        py_file.write(my_dict)
    

    Then I can access the dict literal using from stored_dict import stored_dict

我应该偏好这些选项中的哪一个?


你可以将它转储到 JSON 文件中,这个文件看起来和字典一样。 - Chen A.
1
可能是Python:为什么要使用pickle?的重复问题。 - Chris_Rands
1
另请参见:https://dev59.com/43E95IYBdhLWcg3wkekf - Chris_Rands
这有点取决于字典中包含的数据... - moooeeeep
2个回答

9

Python字典的实现类似于json。您可以使用json模块将字典转储到文件中,并轻松地重新加载:

import json

d = {1: 'a', 2: 'b', 3: 'c'}

with open('C:\temp.txt', 'w') as file:
    json.dump(d, file)

with open('C:\temp.txt', 'r') as file:
    new_d = json.load(file)

>>> new_d
{u'1': u'a', u'3': u'c', u'2': u'b'}

我的字典里有数据框,我得到了错误:TypeError: Object of type DataFrame is not JSON serializable - PM0087

5

根据我的个人经验,我建议使用JSON如果:

  • 您需要一个可读性强的文件,
  • 需要一种在多种技术之间兼容且实现开销不大的文件类型。
  • 需要一个易于编辑的文件(因为它只是一个文本文件)。

如果:

  • 项目的大部分将使用Python编写。
  • 字典可能会变得非常大/复杂或被合并到更大的类中。
  • 需要一个非人类可读的文件。
  • 需要一种在没有先前了解其结构的情况下难以编辑的文件。

根据您在问题中提到的情况,JSON将是更有益的选择。


谢谢您的建议Chad。我本打算使用pickle,但是我知道保持字典可用于明文阅读很有价值;因此我选择使用Json。 - Corey Levinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接