2010-06-21 81 views
22

我见过使用* .cfg(Python Buildout),* .xml(Gnome),* .json(Chrome扩展),* .yaml(Google App Engine),* .ini甚至* .py for app配置文件(如Django)。不同配置格式的优缺点?

我的问题是:为什么有这么多不同的配置文件格式?我可以看到xml vs json方法(更简单一些)或者Python方法(有时候你有一个Python应用程序,不想使用特定的模块来解析一个配置文件)的优点,但是其他的方法呢?方法?

我知道还有比我例示的配置文件更多的格式。相比之下,他们的优势是什么?历史原因?与不同系统兼容?

如果将启动一个应用程序读取某种配置文件(用插件的生态系统),一个你会用哪个呢?

作为例子,我给出了哪些是最古老的?你知道这是历史吗?

回答

12

它主要是个人偏好,目的和可用的库。就我个人而言,我认为XML对于配置文件来说太冗长了,但它很受欢迎,并且拥有很棒的库。

.CFG,的.ini是传统格式,运作良好,许多语言有一个包括图书馆,上面写着他们。我已经在Java,Python,C++中使用它,没有任何问题。它并不是真正的数据交换格式,如果我传递数据,我可能会使用相同的格式进行配置和数据交换。

yaml和json位于xml和cfg/ini之间。您可以在两者中定义许多数据结构,也可以使用cfg这样的简单键值。这两种格式在python中都有很好的库,我假设很多其他语言也有库。我相信json是yaml的子集。

我从来没有使用python文件作为配置,但它确实似乎适用于django。它确实允许你在配置文件中有一些可能有用的代码。

上次我选择了一种格式,我选择了yaml。这很简单,但有一些不错的功能,而且python库很容易安装,而且非常好。 Json紧随其后,从yaml库解析json我选择了yaml。

+0

它很让人知道你的经验。谢谢! – 2010-06-21 19:42:58

+3

JSON实际上是一个对象,使用它作为配置文件似乎非常错误。它缺乏正确使用评论的能力。您始终可以为其创建一个键:值。 – Anders 2010-07-19 21:11:19

5

注意,这是纯粹的意见和猜测我的一部分,但我怀疑,对格式过多的单一最大原因可能是由于缺乏现成的,无处不在的配置文件解析库。由于缺乏这一点,大多数程序必须编写自己的解析器,所以它往往需要平衡配置结构需要的复杂程度(分层还是扁平,纯数据还是嵌入式逻辑,如if语句等),开发人员付出多少努力愿意花费在编写配置文件解析器上,以及最终用户应该承担多大的痛苦。然而,可能你列出并可能想到的所有原因可能是一个或两个项目选择格式的动机。

对于我自己的项目,我倾向于简单地使用的.ini因为有已经内置到Python一个很好的解析器,它已经“足够好”的大部分我的使用情况。在这种情况下,这种情况已经不够了,我已经使用了一个基于XML的配置文件,因为实现起来相对简单。

+0

什么是ini“解析器内置到python”? – 2017-12-05 23:58:01

+1

@mattwilkie它是'configparser',对于doc:https://docs.python.org/3/library/configparser.html – 2017-12-08 20:21:36