為什么要用配置文件
如果代碼中沒有任何的配置文件,而程序內(nèi)部本身就是黑盒,內(nèi)部細(xì)節(jié)無法探知。
一旦遇到需要修改某些參數(shù),不僅耗費(fèi)精力,而且還需要重新剖析代碼,重新編譯,容易引發(fā)
問題。
另外,如果發(fā)布了代碼,需要做適配,對應(yīng)多個測試環(huán)境或者線上環(huán)境。需要多種配置場景,
配置文件可以發(fā)揮巨大作用。
配置文件類型
目前本了解和使用過的配置文件主要有:
- xml
- json
- yaml
- ini
- .properties
全文針對以上幾種配置文件做對比,詳細(xì)講述如何 讀取和操作 配置文件
四種配置文件比較
一、xml pk json
XML文檔可以附上DTD、Schema,還有一堆的諸如XPath之類規(guī)范,使用自定義XML元素或?qū)傩裕?br>
能很方便地給數(shù)據(jù)附加各種約束條件和關(guān)聯(lián)額外信息,從數(shù)據(jù)表達(dá)能力上看,XML強(qiáng)于Json,
但是很多場景并不需要這么復(fù)雜的重量級的東西,輕便靈活的Json就顯得很受歡迎了.
在許多場景中,json能解決80%的問題,殺雞焉用牛刀說的就是兩者的區(qū)別。
所有的配置文件都可以理解為鍵值對,而 xml 文件將單個的鍵值對都作為一個對象來處理,
并且以 <tag> </tag> 的形式出現(xiàn)。
二、JSON 與 YAML
大體上來說,YAML 可以理解為是 JSON 的超集
三、幾種配置文件相互比較
從解析的復(fù)雜度來講
ini 的是線性結(jié)構(gòu),分析起來簡單方便,但是不能表達(dá)復(fù)雜的層次結(jié)構(gòu)
xml/json/yaml 都是層次結(jié)構(gòu),分析比較復(fù)雜,表達(dá)能力強(qiáng)大
各配置文件的簡單示例
xml 文件
XML 被設(shè)計用來傳輸和存儲數(shù)據(jù)(詳情會在下文中介紹)
最簡單的形式
<car brand="Jeep" price="10w"/>
但是如果 對應(yīng)的值不是簡單的一個屬性,而是一整個對象,整個時候是另一中表象方式
<car brand = "Jeep" price = "10w" >
<detail>
<country>German</country>
<buildDay>2017/10</buildDay>
...
</detail>
</car>
json 文件
{
"brand": "Jeep",
"sale": "10w",
"detail": [
{"country": "German"},
{"buildDay": "2017/10"}
]
}
yaml
在下面詳情中講述
.properties
一般在 java 語言中使用較多,不做詳細(xì)描述,本文主要基于 python 解析配置文件
YAML 教程
在實(shí)際項(xiàng)目中,許多數(shù)據(jù)表達(dá)通過 XML 組織
YAML 的優(yōu)勢就在于,它比 XML 和 JSON 都更為容易解讀
YAML(YAML Ain`t a Markup Language) 是遞歸命名的,即 YAML 不是一種標(biāo)記語言
基本語法規(guī)則
- 大小寫敏感
- 使用縮進(jìn)表示層級關(guān)系
- 不允許使用 TAB鍵 來縮進(jìn),只允許使用空格鍵來縮進(jìn)
- 縮進(jìn)的空格數(shù)量不重要(一般為2個空格,也可是是4個)
- 注釋使用 '#'
參考至 :