像 ConfigParser 这样的东西适合在运行之间保存状态(键,值)吗?
我想在 Python 程序运行之间保存一组键、值对(字符串、整数),在后续运行时重新加载它们,并写入更改以便在下次运行时可用。
我不认为这些数据是配置文件,但它非常适合 ConfigParser 功能。 我只需要两个[部分]。 它只有几百对而且非常简单,所以我认为没有必要做一个实际的数据库。
以这种方式使用ConfigParser是否合适? 我还考虑过使用 Perl 和 XML::Simple。 那个怎么样? 有没有办法在 bash 中不用 Python 或 Perl 来做到这一点?
I want to save a set of key, value pairs (string, int) between runs of a Python program, reload them on subsequent runs and write the changes to be available on the next run.
I don't think of this data as a configuration file, but it would fit the ConfigParser capabilities quite well. I would only need two [sections]. It's only a few hundred pairs and very simple so I don't think it's necessary to do an actual database.
Is it appropriate to use ConfigParser in this way? I've also considered using Perl and XML::Simple. What about that? Is there a way to do this in bash without Python or Perl?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
嗯,你有更好的选择。 例如,您可以使用 pickle 或 json 格式。
Pickle 序列化模块非常易于使用。
该格式不是人类可读的,并且 unpickling 不能防止错误或恶意构建的数据。 您不应该取消不受信任的数据。
如果您使用的是 python 2.6,则有一个名为 json 的内置模块。 使用起来就像pickle一样简单:
Json格式是人类可读的,并且与Python中的字典字符串表示非常相似。 并且不存在像pickle那样的任何安全问题。
如果您使用的是早期版本的 python,则可以改为 simplejson。
Well, you have better options. You can for example use pickle or json format.
Pickle serializing module is very easy to use.
The format is not human readable and unpickling is not secure against erroneous or maliciously constructed data. You should not unpickle untrusted data.
If you are using python 2.6 there is a builtin module called json. It is as easy as pickle to use:
Json format is human readable and is very similar to the dictionary string representation in python. And doesn't have any security issues like pickle.
If you are using an earlier version of python you can simplejson instead.
对我来说, PyYAML 非常适合此类事情。 我以前用过pickle或者ConfigParser。
For me, PyYAML works well for these kind of things. I used to use pickle or ConfigParser before.
ConfigParser 是一个很好的方法。 还有其他方法(已经提到的 json 和 cPickle 模块可能有用)也很好,具体取决于您想要文本文件还是二进制文件,以及您是否希望代码仅在旧版本的 Python 中工作。
您可能希望在您选择的方式之上有一个薄的抽象层,以便更容易改变您的想法。
ConfigParser is a fine way of doing it. There are other ways (the json and cPickle modules already mentioned may be useful) that are also good, depending on whether you want to have text files or binary files and if you want code to work simply in older versions of Python or not.
You may want to have a thin abstraction layer on top of your chosen way to make it easier to change your mind.
听起来像是 dbm 的工作。 基本上它是一个存在于程序外部的哈希值。 有很多实现。 在 Perl 中,将 dbm 绑定到哈希(即使其看起来像 dbm实际上是一个普通的哈希变量)。 我不知道 Python 中是否有等效的机制,但如果没有,我会感到惊讶。
Sounds like a job for a dbm. Basically it is a hash that lives external to your program. There are many implementations. In Perl it is trivial to tie a dbm to a hash (i.e. make it look like a dbm is really a normal hash variable). I don't know if there is any equivalent in mechanism in Python, but I would be surprised if there weren't.
在 bash 中重新执行此操作:如果您的字符串是有效的标识符,则可以使用环境变量和
env
。Re doing it in bash: If your strings are valid identifiers, you could use environment variables and
env
.如果您可以逐个更新状态键,那么任何 DBM 数据库都可以工作。 如果您需要真正的高性能和紧凑的存储,那么 Tokyo Cabinet - http://tokyocabinet.sourceforge.net/是很酷的玩具。
如果您想一次保存和加载整个内容(可能保留旧版本或类似版本)并且没有太多数据,那么只需使用 JSON。 它比 XML 好用得多。 我不知道 Python 中的 JSON 实现是如何的,但在 Perl 中,JSON::XS 模块速度非常快。
If you can update the state key by key then any of the DBM databases will work. If you need really high performance and compact storage then Tokyo Cabinet - http://tokyocabinet.sourceforge.net/ is the cool toy.
If you want to save and load the whole thing at once (to maybe keep old versions or some such) and don't have too much data then just use JSON. It's much nicer to work with than XML. I don't know how the JSON implementation is in Python, but in Perl the JSON::XS module is insanely fast.