簡體   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