代码之家  ›  专栏  ›  技术社区  ›  Dennis Williamson

像ConfigParser这样的东西是否适合在运行之间保存状态(键、值)?

  •  2
  • Dennis Williamson  · 技术社区  · 15 年前

    我想在Python程序的两次运行之间保存一组键、值对(string、int),在后续运行中重新加载它们,并编写下一次运行时可用的更改。

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

    以这种方式使用ConfigParser合适吗?我还考虑过使用Perl和XML::Simple。那怎么办?在没有Python或Perl的情况下,有没有办法在bash中实现这一点?

    6 回复  |  直到 15 年前
        1
  •  16
  •   Nadia Alramli    15 年前

    嗯,你有更好的选择。例如,您可以使用 pickle json 总体安排

    import cPickle
    cPickle.dump(obj, open('save.p', 'wb')) 
    obj = cPickle.load(open('save.p', 'rb'))
    

    该格式不是人类可读的,并且取消勾选对于错误或恶意构造的数据不安全。您不应该取消勾选不受信任的数据。

    如果您使用的是Python2.6,则有一个名为 . 使用起来就像泡菜一样简单:

    import json
    encoded = json.dumps(obj)
    obj = json.loads(encoded)
    

    Json格式是人类可读的,与python中的字典字符串表示非常相似。而且没有像pickle这样的安全问题。

    如果您使用的是早期版本的python,则可以 simplejson 相反

        2
  •  8
  •   stephan    15 年前

    为了我, PyYAML

        3
  •  2
  •   user25148 user25148    15 年前

    ConfigParser是一种很好的方法。还有其他一些方法(前面提到的json和cPickle模块可能很有用)也很好,这取决于您想要的是文本文件还是二进制文件,以及您想要的代码是否只在较旧版本的Python中工作。

        4
  •  2
  •   Chas. Owens    15 年前

    听起来像是一个年轻人的工作 dbm . 基本上,它是一个存在于程序外部的散列。有许多实现。在Perl中,使用 tie a dbm to a hash (也就是说,让它看起来像一个dbm实际上是一个普通的散列变量)。我不知道Python中的机制是否有任何等价物,但如果没有,我会感到惊讶。

        5
  •  0
  •   Nathan Kitchen    15 年前

    如果字符串是有效标识符,那么可以使用环境变量和 env .

        6
  •  0
  •   Ask Bjørn Hansen    15 年前

    如果可以逐个键更新状态键,那么任何DBM数据库都可以工作。如果您需要真正的高性能和紧凑型存储,请选择Tokyo Cabinet- http://tokyocabinet.sourceforge.net/ 这是个很酷的玩具。