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
這個內建模組。
- 先建立一個
ConfigParser()
的物件f
。 f.read()
去抓檔按裡面內容。f.sections()
可以得到所有的section
。options = f.options(section)
可以取出某個section
裡的所有option
名稱。f.get(section, op)
可以取得裡面的設定值。
我寫的這個函數其實只是把這些步驟包裝起來而已。
結語
其實configparser的官方文件就說明很清楚,改天再來記一下PYTHON建立INI檔的方式。