Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 像ConfigParser这样的东西是否适合在运行之间保存状态(键、值)?_Python_Xml_Perl_Configparser - Fatal编程技术网

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

Python 像ConfigParser这样的东西是否适合在运行之间保存状态(键、值)?,python,xml,perl,configparser,Python,Xml,Perl,Configparser,我想在Python程序的两次运行之间保存一组键、值对(string、int),在后续运行中重新加载它们,并编写下一次运行时可用的更改 我不认为这些数据是一个配置文件,但它非常适合ConfigParser功能。我只需要两个[部分]。它只有几百对,非常简单,所以我认为没有必要做一个实际的数据库 以这种方式使用ConfigParser合适吗?我还考虑过使用Perl和XML::Simple。那怎么办?在没有Python或Perl的情况下,有没有办法在bash中实现这一点?好吧,您有更好的选择。例如,您可

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

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


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

好吧,您有更好的选择。例如,您可以使用或格式化。 Pickle序列化模块非常容易使用

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,您可以改为使用。

对我来说,它适用于这类事情。我以前使用过pickle或ConfigParser。

我们在bash中这样做:如果字符串是有效标识符,那么可以使用环境变量,ConfigParser是一种很好的方法。还有其他一些方法(前面提到的json和cPickle模块可能很有用)也很好,这取决于您想要的是文本文件还是二进制文件,以及您想要的代码是否只在较旧版本的Python中工作


你可能希望在你选择的方法上有一个很薄的抽象层,这样更容易改变你的想法。

听起来像是一个工作。基本上,它是一个存在于程序外部的散列。有许多实现。在Perl中,这是很简单的(例如,使它看起来像一个dbm实际上是一个普通的散列变量)。我不知道Python中的机制是否有任何等价物,但如果没有,我会感到惊讶。

如果可以逐个键更新状态键,那么任何DBM数据库都可以工作。如果你真的需要高性能和紧凑的存储空间,那么东京橱柜是很酷的玩具


如果您想一次保存并加载整个内容(可能保留旧版本或类似版本),并且没有太多数据,那么只需使用JSON即可。使用它比使用XML好得多。我不知道Python中的JSON实现是如何实现的,但在Perl中,JSON::XS模块的速度非常快。

我是YAML迷。它是人类可读的、跨平台的(Python、Perl、C等),并且与JSON兼容。@Michael:是的,每个JSON文件都是有效的YAML(请参阅)YAML非常好,特别是对于配置文件,因为它具有人类可读性。对于不需要人眼的东西,json应该足够好,因为它现在是python发行版的一部分@事实上,我认为克里斯·利布更接近我所说的。dbm的好处是多种语言可以使用同一个dbm文件。shelve使用pickle的事实限制了它被其他语言使用的能力。