不同配置格式的优缺点?

时间:2010-06-21 13:26:23

标签: python json xml google-app-engine configuration-files

我见过有人使用* .cfg(Python Buildout),* .xml(Gnome),*。json(Chrome扩展程序),* .yaml(Google App Engine),* .ini甚至* .py应用程序配置文件(如Django)。

我的问题是:为什么有这么多不同的配置文件格式?我可以从xml vs json方法(更简洁的方法)或Python方法中看到一个优势(有时你有一个Python应用程序,并且不想仅使用特定的模块来解析配置文件),但是另一个呢?方法

我知道有比我举例说明的那些配置文件更多的格式。与对方相比,他们的优势是什么?历史原因?与不同系统的兼容性?

如果您要启动应用程序来读取某种配置文件(带有插件生态系统),您会使用哪一种?

我举例说哪些是最老的?你知道它的历史吗?

4 个答案:

答案 0 :(得分:18)

主要是个人偏好,目的和可用的图书馆。就个人而言,我认为xml对于配置文件来说过于冗长,但它很受欢迎且具有很棒的库。

.cfg,.ini是一种运行良好的传统格式,许多语言都有一个包含它的库。我已经在Java,Python,C ++中使用它而没有任何问题。它并不真正作为数据交换格式工作,如果我传递数据,我可能会使用相同的格式进行配置和数据交换。

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

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

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

答案 1 :(得分:6)

请注意,这是我的纯粹意见和猜测,但我怀疑过多格式的最大原因可能是由于缺乏一个随时可用的,无所不在的配置文件解析库。缺乏这一点,大多数程序必须编写自己的解析器,因此通常需要在配置结构需要复杂程度(层次与平面,纯数据与嵌入式逻辑,如if语句等)之间取得平衡,开发人员需要付出多少努力他们愿意花费在编写配置文件解析器上,以及最终用户应该感到多么痛苦。但是,可能你列出并且可能认为的每一个原因都可能是一两个项目选择其格式的动机。

对于我自己的项目,我倾向于使用.ini只是因为Python中已经内置了一个优秀的解析器,并且对于我的大多数用例来说它已经“足够好”了。在这两种情况下,它已经不够用了,我已经使用了基于XML的配置文件,这也是因为实现相对简单。

答案 2 :(得分:0)

这实际上取决于配置文件的读取器/写入器是否是非程序员,或者是否具有严格的编程访问权限。

XML,JSON等完全不适合人类使用,而INI格式对人类来说是合理的一半。

如果配置文件仅具有编程访问权限(程序员偶尔进行编辑),则任何受支持的格式(XML,JSON或INI)都适用。 INI文件不适用于结构化参数,因为XML和JSON可以支持数组,结构/对象等。

答案 3 :(得分:0)

根据Python官方文档,“未来对配置功能的增强将 添加到dictConfig()'。

因此,可以与dictconfig()一起使用的任何配置文件都应该没问题。