使用ConfigParser保存运行期间的状态(键值对)合适吗?

2 投票
6 回答
2162 浏览
提问于 2025-04-15 11:52

我想在运行一个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

撰写回答