【发布时间】:2013-08-27 13:44:35
【问题描述】:
在我之前在这里提出的一个问题 (Most appropriate way to combine features of a class to another?) 之后,我得到了一个我终于明白的答案。简而言之,我现在打算拥有一堆字典,每个字典看起来有点像这样:
{ "url": "http://....", "parser": SomeParserClass }
虽然以后可能会添加更多属性,但会包括字符串或其他一些类。 现在我的问题是:保存这些对象的最佳方法是什么?
我想出了 3 个解决方案,不知道哪个是最好的,以及是否还有其他更可接受的解决方案。
使用 pickle,虽然使用它似乎很有效,但编辑任何这些字典都会很痛苦,因为它是以二进制格式保存的。
将每个字典保存在单独的模块中并从单个目录中动态导入这些模块,每个模块内部都有一个函数来返回字典或特制的变量名称来保存它,以便我可以调用它从我的加载代码。这似乎更容易编辑,但听起来不是很有效或 python
使用 MongoDB 或 Riak 之类的某种数据库来保存这些对象,我对这个的问题是编辑是可行的,但听起来并不有趣,而且前 2 个都配备了用于正确地将我的解析器类保存在字典中,我不知道这些数据库如何序列化或“腌制”这些对象。
如您所见,我主要关心的是编辑它们的难易程度、保存和检索数据的效率(虽然不是一个大问题,因为我只有几百个这样的数据)以及解决方案的正确性.
那么,有什么想法吗?
提前感谢您提供的任何帮助。
【问题讨论】:
-
你可以考虑json。它支持python字典。它们也可以轻松编辑。
-
可能有很多您没有告诉/不能告诉我们的细节会影响您的决定。键总是相同的类型吗?您的数据本质上是有限的吗?然后使用 JSON。如果不是,类型转换可能会导致键冲突。 Pickle 对于保存可散列的可执行对象特别有用,它在递归引用方面很聪明,但它也可能是一个漏洞。 “序列化 Python 数据的最佳方式是什么?”这实际上不是一个主观问题,但它对您要序列化的数据的性质高度敏感。