使用ConfigParser保存运行期间的状态(键值对)合适吗?
我想在运行一个Python程序时,保存一组键值对(字符串和整数),然后在下次运行时重新加载这些数据,并把更改保存下来,以便下次运行时可以使用。
我不把这些数据当作配置文件,但它的确很适合用ConfigParser来处理。我只需要两个[部分]。这些数据只有几百对,而且很简单,所以我觉得用真正的数据库来处理并不必要。
这样使用ConfigParser合适吗?我也考虑过用Perl和XML::Simple,这样怎么样?有没有办法在不使用Python或Perl的情况下,用bash来实现这个?
6 个回答
2
ConfigParser 是一个很不错的选择来处理这个问题。还有其他方法,比如之前提到的 json 和 cPickle 模块,这些也很好用,具体取决于你想要使用文本文件还是二进制文件,以及你是否希望代码在旧版本的 Python 中也能简单运行。
你可能还想在你选择的方法上加一个简单的抽象层,这样如果你改变主意,修改起来会更方便。
8
对我来说,PyYAML 在处理这些事情时效果很好。之前我常用的是 pickle 或 ConfigParser。
16
其实你有更好的选择。比如,你可以使用pickle或者json格式。Pickle这个序列化模块非常简单好用。
import cPickle
cPickle.dump(obj, open('save.p', 'wb'))
obj = cPickle.load(open('save.p', 'rb'))
不过,pickle格式不太容易让人看懂,而且反序列化的时候不太安全,可能会受到错误或恶意数据的攻击。所以,你不应该对不可信的数据进行反序列化。
如果你使用的是Python 2.6版本,有一个内置模块叫json,用起来和pickle一样简单:
import json
encoded = json.dumps(obj)
obj = json.loads(encoded)
Json格式是人类可读的,和Python中的字典字符串表示法非常相似。而且它没有像pickle那样的安全问题。
如果你使用的是更早版本的Python,可以考虑用simplejson。