Python

Python:讀取 *.ini 組態設定檔

前言

通常一個軟體一定會有許多檔案來進行參數設定,畢竟不可能寫死在程式變數中,這時候外部的設定檔就可以讓使用者去自行定義自己得參數,在WINDOWS中最常見的設定就是INI檔。

INI檔裡面的樣子

先來看一個影像感測器的參數檔

[Versions]
ueye_api_64.dll=4.93.1730
ueye_usb_64.sys=4.93.1314
ueye_boot_64.sys=4.93.1314

[Sensor]
Sensor=UI154xLE-M
Sensor bit depth=0
Sensor source gain=0
FPN correction mode=0
Black reference mode=0
Sensor digital gain=0

[Image size]
Start X=0
Start Y=0
Start X absolute=1
Start Y absolute=1
Width=1280
Height=1024
Binning=0
Subsampling=0

簡易解說

  • section:中括號框起來的地方。類似群組功能,底下放置相關的參數。
  • oprtion:用等號 (=) 設定參數。左邊是參數名稱,右邊是設定值。

由上面的範例可以看出一個INI檔可以設定好幾個section,每個section中又可以設定對應的option,也就是參數。

Python讀取INI檔

先上程式再說。

from configparser import ConfigParser

def print_info(func):
    def wrapper(*args, **kargs):
        cfg = func(*args, **kargs)
        for k, v in cfg.items():
            print("{:16s} {}".format( k,str(v) ) )
        return cfg
    return wrapper

@print_info
def load_cfg(cfg_file):
    def null_proc(text):
        if text in ["None,"Null","none","null"]:
            return "None"
        else: return text

    config = {}
    f = ConfigParser()
    f.read(cfg_file, encoding="utf-8")
    sections = f.sections()
    print(sections)

    for section in sections:
        config[section] = {}
        options = f.options(section)
        for op in options:
            config[section][op] = null_proc(f.get(section, op))

    return config

這是我自己寫得讀取模組load_cfg(),會把讀到的參數設定到dict中。

註:這邊可以先忽略code>@print_info這東西,作用只是去印出讀到的東西而已。

主要讀取方法是靠configparser這個內建模組。

  1. 先建立一個ConfigParser()的物件f
  2. f.read()去抓檔按裡面內容。
  3. f.sections()可以得到所有的section
  4. options = f.options(section)可以取出某個section裡的所有option名稱。
  5. f.get(section, op)可以取得裡面的設定值。

我寫的這個函數其實只是把這些步驟包裝起來而已。

結語

其實configparser的官方文件就說明很清楚,改天再來記一下PYTHON建立INI檔的方式。

參考

留下一個回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *