我想在Python程序的运行之间保存一组键值对(字符串,整数),在后续运行时重新加载它们,并将更改写入下次运行时可用。
我不认为这些数据是配置文件,但它很适合ConfigParser功能。我只需要两个[部分]。它只有几百对而且非常简单,所以我认为不需要做一个真正的数据库。
以这种方式使用ConfigParser是否合适?我也考虑过使用Perl和XML :: Simple。那个怎么样?有没有办法在没有Python或Perl的bash中执行此操作?
答案 0 :(得分:16)
嗯,你有更好的选择。例如,您可以使用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中的字典字符串表示非常相似。而且没有任何像pickle这样的安全问题。
如果您使用的是早期版本的python,则可以simplejson代替。
答案 1 :(得分:8)
对我来说,PyYAML适用于这类事情。我之前习惯使用pickle或ConfigParser。
答案 2 :(得分:2)
ConfigParser是一种很好的方法。还有其他方法(已经提到的json和cPickle模块可能很有用),这取决于你是否想要文本文件或二进制文件,以及你是否希望代码只在旧版本的Python中工作。 / p>
您可能希望在您选择的方式之上拥有一个精简的抽象层,以便更容易改变主意。
答案 3 :(得分:2)
听起来像dbm的工作。基本上它是一个存在于程序外部的哈希。有很多实现。在Perl中,tie a dbm to a hash是微不足道的(即使它看起来像dbm实际上是一个普通的哈希变量)。我不知道Python中是否有任何等效的机制,但如果没有,我会感到惊讶。
答案 4 :(得分:0)
在bash中重做:如果你的字符串是有效的标识符,你可以使用环境变量和env
。
答案 5 :(得分:0)
如果您可以按键更新状态键,那么任何DBM数据库都可以使用。如果您需要真正的高性能和紧凑型存储,那么Tokyo Cabinet - http://tokyocabinet.sourceforge.net/就是很酷的玩具。
如果你想一次保存和加载整个东西(可能保留旧版本或其他类似版本)并且没有太多数据,那么只需使用JSON即可。使用它比使用XML要好得多。我不知道JSON实现是如何在Python中实现的,但在Perl中,JSON :: XS模块的速度非常快。