在我之前问过的一个问题(Most appropriate way to combine features of a class to another?)后,我得到了一个答案,我终于明白了。简而言之,我现在打算拥有一堆字典,每个字典看起来都像这样:
{ "url": "http://....", "parser": SomeParserClass }
虽然稍后可能会添加更多属性,但会包含字符串或其他类。 现在我的问题是:保存这些对象的最佳方法是什么?
我想到了3个解决方案,不确定哪个是最好的,是否还有其他更可接受的解决方案。
使用pickle,虽然使用它很有效但会使编辑这些词典变得很麻烦,因为它以二进制格式保存。
将每个字典保存在一个单独的模块中并从单个目录中动态导入这些模块,每个模块都要在其中有一个函数来返回字典或一个特制的变量名来保存它以便我可以调用它从我的加载代码。这似乎更容易编辑,但听起来不是很有效或pythonic
使用像MongoDB或Riak这样的某种数据库来保存这些对象,我的问题是编辑哪个是可行但听起来不是很有趣,前者2配备的方法是正确地将我的解析器类保存在字典中,我不知道这些数据库如何序列化或“挑选”这些对象。
正如您所看到的那样,我主要关心的是编辑它们有多容易,保存和检索数据的效率(虽然不是因为我只有几百个这样的问题而不是一个大问题)以及解决方案的正确性
那么,有什么想法吗?
提前感谢您提供的任何帮助。
答案 0 :(得分:3)
使用JSON。它支持python词典,可以轻松编辑。
答案 1 :(得分:0)
您可以尝试shelve。它建立在pickle
之上,让你序列化对象并将它们与字符串键相关联。
因为它基于dbm
,所以它只会根据您的需要访问键/值。因此,如果您只需要从大型字典中访问一些项目,shelve
可能是比json
更好的选择,{{1}}必须先将整个JSON文件加载到字典中。