2010-06-21 59 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