【Python】常用配置文件匯總(INI、XML、JSON、YAML、PY)

2021-12-24 乾貨共享菌
引言

配置文件常為程序運行提供參數,為參數的統一管理提供便利。本文以Python語言為例,講解各種配置文件的用法。

INI

INI取自英文initialization(初始)的首字縮寫,常常使用在Windows作業系統上,由節、鍵、值組成。節用[section]表示,鍵值用=連接,注釋用;,不同節間一般用空行分隔。

優點

面向大眾,簡潔易懂,非專業人員也能看懂。

缺點

無法表現數組、層級關係等複雜的數據結構。

config.ini

[params]
a=1
b=2

test_ini.py

import configparser


def test_ini():
    cf = configparser.ConfigParser()
    cf.read('config.ini')
    a = cf['params']['a']
    b = cf['params']['b']
    print(a, b)


if __name__ == '__main__':
    test_ini()

XML

XML(Extensible Markup Language)為可拓展標記語言,是一種用於標記電子文件使其具有結構性的標記語言,常被用於簡化Internet的文檔信息傳輸。類似於HTML,由多個帶層次結構的標籤組成。文檔的首行是聲明語句,內容由標籤組成,注釋用法同HTML

優點

相比於INI來說,能表示非常複雜的層級關係。

缺點

太冗餘了~閱讀體驗不佳,不適合作配置文件。

config.xml

<?xml version="1.0"?>
<params>
    <a>1</a>
    <b>2</b>
</params>

test_xml.py

import xml.etree.ElementTree as ET


def test_xml():
    tree = ET.parse('config.xml')
    root = tree.getroot()
    a = root[0].text
    b = root[1].text
    print(a, b)


if __name__ == '__main__':
    test_xml()

JSON

JSON(JavaScript Object Notation,JS對象表示法)以易於讓人閱讀的文字為基礎,用來傳輸由屬性值或者序列性的值組成的數據對象。JSON的數據表示類似於Python的字典,解決了XML冗餘的問題,展示給用戶更直觀的數據結構。

優點

比 XML 更簡潔,閱讀體驗更佳。

缺點

雙引號太多,不適合做配置文件。

config.json

{
    "params": {
        "a": 1,
        "b": 2
    }
}

test_json.py

import json


def test_json():
    data = json.load(open('config.json'))
    a = data['params']['a']
    b = data['params']['b']
    print(a, b)


if __name__ == '__main__':
    test_json()

YAML👍

YAML的可讀性比JSON更好,鍵值對不用加引號,視覺效果上更舒適。參考了Python的設計,注釋採用#號,層級關係用縮進表示。

優點

對JSON的進一步簡化。

缺點

暫時沒有發現什麼缺點。

config.yaml

params:
  a: 1
  b: 2

test_yaml.py

import yaml


def test_yaml():
    data = yaml.load(open('config.yaml'), Loader=yaml.FullLoader)
    a = data['params']['a']
    b = data['params']['b']
    print(a, b)


if __name__ == '__main__':
    test_yaml()

PY👍

如果是使用Python編程,PY文件不失為一種好的選擇。PYPython源碼後綴,在PY文件裡面定義字典可充當程序運行的配置文件。

優點

Python內部字典對象,無需解析,直接調用。

缺點

相比於YAML來說略顯冗餘,因為鍵需要引號。

config.py

params = {
    'a': 1,
    'b': 2
}

test_py.py

from config import params


def test_py():
    a = params['a']
    b = params['b']
    print(a, b)


if __name__ == '__main__':
    test_py()

總結

就使用Python語言編程的用戶來說,個人強烈推薦使用PYYAML充當配置文件。PY裡面定義的字典變量無需解析,可以直接調用。YAML的數據表示非常簡潔直觀,同時也參考了Python語言設計的思想,更適合於Python用戶。

提示

對於更加複雜的任務,命令行參數解析搭配配置文件使用更佳喔。例如深度學習訓練過程中,如果有多個訓練任務,那麼就需要寫多個配置文件,你只需在命令行參數裡面傳入配置文件所在的路徑,即可實現不同訓練任務的切換。

倉庫

https://github.com/XavierJiezou/python-config-file

參考
https://zh.wikipedia.org/wiki/INI文件
https://zh.wikipedia.org/wiki/XML
https://zh.wikipedia.org/wiki/JSON
https://zh.wikipedia.org/wiki/YAML

相關焦點

  • 配置文件Yaml之python版
    什麼是 yamlyaml 可以做配置文件,但是yaml不僅僅是配置文件,其本身就是一種語言,有自己的語法和使用規範。
  • 5 分鐘掌握 Python 中常見的配置文件
    為什麼要寫配置文件在開發過程中,我們常常會用到一些固定參數或者是常量。對於這些較為固定且常用到的部分,往往會將其寫到一個固定文件中,避免在不同的模塊代碼中重複出現從而保持核心代碼整潔。這個固定文件我們可以直接寫成一個 .py 文件,例如 settings.py 或 config.py,這樣的好處就是能夠在同一工程下直接通過 import 來導入當中的部分;但如果我們需要在其他非 Python 的平臺進行配置文件共享時,寫成單個 .py 就不是一個很好的選擇。
  • 使用golang解析yaml、json、xml文件
    = nil {  log.Fatal(err) } var data [7]Users err2 := yaml.Unmarshal(file, &data) if err2 != nil {  log.Fatal(err2) } for _, v := range data {  fmt.Println(v) }}輸出內容如下{wanger 24 beijing [literature social]}{冬哥 30 chengdu [basketball guitar]}
  • Python讀取ini配置文件
    目前是使用python來實現的,將代碼打包成了exe文件,方便客戶進行測試。下面說一下配置文件,本次直說ini格式的配置文件。創建ini文件在目錄中創建.ini文件,我們以config.ini文件名為例。進行創建。在創建好的文件內編寫配置信息。
  • C#讀寫ini配置文件實例
    我們搞工控上位機的軟體,經常需要用到存參數到本地的配置文件
  • 現代配置指南——YAML 比 JSON 高級在哪?
    .json 文件,最常見的比如:這些配置對前端非常友好,因為都是我們熟悉的 JS 對象結構。一般靜態化的配置會選擇 json 文件,而動態化的配置,涉及到引入其他模塊,因此會選擇 js 文件。還有現在許多新工具同時支持多種配置,比如 Eslint,兩種格式的配置任你選擇:後來不知道什麼時候,突然出現了一種以 .yaml 或 .yml 為後綴的配置文件。
  • Python入門Python處理CSV、JSON和XML數據的簡便方法
    這次我們將創建一個writer對象並使用它將我們的數據寫入文件,與讀取時的方法基本一樣。將數據格式化為字典列表後,我們將使用該dicttoxml庫將其轉換為XML格式。我們還將其保存為JSON文件!我們以字典的形式讀取CSV時,然後我們將該字典格式數據寫入文件。
  • 千萬不要用JSON作配置文件
    例如在MediaWiki的skin.json文件中,這是一個問題。替代方案——JSON的創造者Douglas Crockford的「推薦方式」是「在將文件交給JSON解析器之前,通過JSMin管理它」。一些JSON解析器也明確支持注釋(但大多數不支持)。但預先處理配置文件是一件痛苦的事情。
  • Python入門教程Python處理CSV、JSON和XML數據的簡便方法
    Python的卓越靈活性和易用性使其成為最受歡迎的程式語言之一,尤其是對於數據處理和機器學習方面來說,其強大的數據處理庫和算法庫使得python成為入門數據科學的首選語言。在日常使用中,CSV,JSON和XML三種數據格式佔據主導地位。下面我將針對三種數據格式來分享其快速處理的方法。CSV數據CSV是存儲數據的最常用方法。
  • python3 讀取XML文件的入坑經歷
    需要讀取xml裡的路徑,依次處理圖片所以,開始python xml文件的操作開始時使用命令行的形式,讀取xml文件的路徑,然後判斷文件是否存在,存在,就解析。else: xml_file_path = '' print("xml path not exist!") 問題分析命令行參數傳錯了,xml_file_path = sys.argv[1],才是傳入的xml文件的路徑,如果是sys.argv[0],那麼,是執行的python文件本身!!所以,文件存在,但是,文件解析失敗!!
  • 每日一課 | Python –讀取XML文件(DOM示例)
    讀取XML文件並列印出其值。XML文件一個簡單的XML文件,稍後使用Python minidom對其進行解析。staff.xml <?xml version="1.0"?dom-example.py from xml.dom import minidomdoc = minidom.parse("staff.xml")# doc.getElementsByTagName returns NodeList
  • 3招Python 處理CSV、JSON和XML數據的簡便方法!
    Python的卓越靈活性和易用性使其成為最受歡迎的程式語言之一,尤其是對於數據處理和機器學習方面來說,其強大的數據處理庫和算法庫使得python成為入門數據科學的首選語言。在日常使用中,CSV,JSON和XML三種數據格式佔據主導地位。下面我將針對三種數據格式來分享其快速處理的方法。CSV是存儲數據的最常用方法。在Kaggle比賽的大部分數據都是以這種方式存儲的。
  • YAML語法詳細介紹
    它可以很簡單且清晰的表達對象、數組、標量等數據,並通過空白縮進來表達數據的層次結構,非常適合做配置文件,編輯數據結構和文件大綱等。很多程式語言(如 C, Java, Perl, Python, Ruby 等)都有其對應的模塊包可以處理 YAML 語言或 YAML 文件(以 yml 結尾)。
  • 【python】讀取json文件
    閱讀大概需要5分鐘跟隨小博主,每天進步一丟丟最近要打個比賽,在處理數據的時候,發現數據竟然是json文件的,
  • Python+requests接口自動化測試框架實例詳解教程
    ,接下來就該一步步的填充整個框架了,首先,我們先來看看config.ini和readConfig.py兩個文件,從他們入手,個人覺得比較容易走下去噠。沒錯,我們開始配置接口文件啦!(終於寫到接口了,是不是很開心啊~)下面是接口文件中主要部分的內容,讓我們一起來看看吧。
  • Python測試框架Pytest的常用插件測試報告
    配置文件 addopts 中添加選項 --html=測試報告路徑(1)命令行方式:pytest --html report/report.html --self-contained-html(2)pytest.ini文件:addopts = pytest --html report/report.html --self-contained-html註:默認情況下生成的
  • Python通過fnmatch模塊實現文件名匹配
    如果在數據處理操作中,只需要使用簡單的通配符就能完成文件名的匹配,則使用 fnmatch 模塊是不錯的選擇。fnmatch 模塊中,常用的函數及其功能如表 1 所示。Python fnmatch模塊常用函數及功能函數名功能fnmatch.filter(names, pattern)對 names 列表進行過濾,返回 names 列表中匹配 pattern 的文件名組成的子集合。
  • python處理JSON數據
    相同的數據,json格式相比與xml格式的佔用空間小,解析速度更快。
  • Python 項目管理與構建工具:CookieCutter, PyScaffold, PyBuilder, Poetry
    │   ├── cli.py│   └── sample.py├── setup.cfg├── setup.py├── tests│   ├── __init__.py│   └── test_sample.py└── tox.ini 3 directories, 26 files