我想在 Python 程序的运行之间保存一组键、值对(字符串、整数),在后续运行时重新加载它们,并编写更改以在下次运行时可用。
我不认为这些数据是配置文件,但它非常适合 ConfigParser 功能。我只需要两个[部分]。它只有几百对而且非常简单,所以我认为没有必要做一个实际的数据库。
以这种方式使用 ConfigParser 是否合适?我也考虑过使用 Perl 和 XML::Simple。那个怎么样?有没有办法在没有 Python 或 Perl 的 bash 中做到这一点?
我想在 Python 程序的运行之间保存一组键、值对(字符串、整数),在后续运行时重新加载它们,并编写更改以在下次运行时可用。
我不认为这些数据是配置文件,但它非常适合 ConfigParser 功能。我只需要两个[部分]。它只有几百对而且非常简单,所以我认为没有必要做一个实际的数据库。
以这种方式使用 ConfigParser 是否合适?我也考虑过使用 Perl 和 XML::Simple。那个怎么样?有没有办法在没有 Python 或 Perl 的 bash 中做到这一点?
好吧,你有更好的选择。例如,您可以使用pickle或json格式。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代替。
对我来说,PyYAML非常适合这类事情。我以前使用过 pickle 或 ConfigParser。
ConfigParser 是一种很好的方法。还有其他方法(已经提到的 json 和 cPickle 模块可能有用)也很好,这取决于您是否想要文本文件或二进制文件,以及您是否希望代码仅在旧版本的 Python 中工作。
您可能希望在您选择的方式之上有一个薄抽象层,以便更容易改变您的想法。
听起来像是dbm的工作。基本上它是一个存在于您的程序外部的哈希。有很多实现。在 Perl 中,将一个 dbm 与一个散列联系起来是微不足道的(即,让它看起来像一个 dbm 真的是一个普通的散列变量)。我不知道 Python 中是否有任何等效机制,但如果没有,我会感到惊讶。
在 bash 中重新执行:如果您的字符串是有效的标识符,您可以使用环境变量和env
.
如果您可以逐键更新状态键,那么任何 DBM 数据库都可以工作。如果您需要真正的高性能和紧凑的存储空间,那么 Tokyo Cabinet - http://tokyocabinet.sourceforge.net/是一款很酷的玩具。
如果您想一次保存和加载整个内容(可能保留旧版本或类似版本)并且没有太多数据,那么只需使用 JSON。它比 XML 好用得多。我不知道 JSON 在 Python 中的实现如何,但在 Perl 中 JSON::XS 模块非常快。