2

我想在 Python 程序的运行之间保存一组键、值对(字符串、整数),在后续运行时重新加载它们,并编写更改以在下次运行时可用。

我不认为这些数据是配置文件,但它非常适合 ConfigParser 功能。我只需要两个[部分]。它只有几百对而且非常简单,所以我认为没有必要做一个实际的数据库。

以这种方式使用 ConfigParser 是否合适?我也考虑过使用 Perl 和 XML::Simple。那个怎么样?有没有办法在没有 Python 或 Perl 的 bash 中做到这一点?

4

6 回答 6

16

好吧,你有更好的选择。例如,您可以使用picklejson格式。Pickle 序列化模块非常好用。

import cPickle
cPickle.dump(obj, open('save.p', 'wb')) 
obj = cPickle.load(open('save.p', 'rb'))

该格式不是人类可读的,并且 unpickling 对于错误或恶意构造的数据不安全。您不应该解开不受信任的数据。

如果您使用的是 python 2.6,则有一个名为json的内置模块。使用起来就像泡菜一样简单:

import json
encoded = json.dumps(obj)
obj = json.loads(encoded)

Json 格式是人类可读的,与 python 中的字典字符串表示非常相似。并且没有任何像泡菜这样的安全问题。

如果您使用的是较早版本的 python,则可以使用simplejson代替。

于 2009-05-27T16:49:26.503 回答
8

对我来说,PyYAML非常适合这类事情。我以前使用过 pickle 或 ConfigParser。

于 2009-05-27T16:55:39.660 回答
2

ConfigParser 是一种很好的方法。还有其他方法(已经提到的 json 和 cPickle 模块可能有用)也很好,这取决于您是否想要文本文件或二进制文件,以及您是否希望代码仅在旧版本的 Python 中工作。

您可能希望在您选择的方式之上有一个薄抽象层,以便更容易改变您的想法。

于 2009-05-27T17:06:22.540 回答
2

听起来像是dbm的工作。基本上它是一个存在于您的程序外部的哈希。有很多实现。在 Perl 中,将一个 dbm 与一个散列联系起来是微不足道的(即,让它看起来像一个 dbm 真的是一个普通的散列变量)。我不知道 Python 中是否有任何等效机制,但如果没有,我会感到惊讶。

于 2009-05-27T18:46:12.027 回答
0

在 bash 中重新执行:如果您的字符串是有效的标识符,您可以使用环境变量和env.

于 2009-05-27T17:02:14.873 回答
0

如果您可以逐键更新状态键,那么任何 DBM 数据库都可以工作。如果您需要真正的高性能和紧凑的存储空间,那么 Tokyo Cabinet - http://tokyocabinet.sourceforge.net/是一款很酷的玩具。

如果您想一次保存和加载整个内容(可能保留旧版本或类似版本)并且没有太多数据,那么只需使用 JSON。它比 XML 好用得多。我不知道 JSON 在 Python 中的实现如何,但在 Perl 中 JSON::XS 模块非常快。

于 2009-05-28T03:45:52.743 回答