繁体   English   中英

ConfigParser之类的东西是否适合在运行之间保存状态(键,值)?

[英]Is something like ConfigParser appropriate for saving state (key, value) between runs?

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

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

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

好吧,你有更好的选择。 例如,您可以使用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

对我来说, 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模块的速度非常快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM