A Linuxban gyakoribb, hogy.conf ”fájlokat, mint a.ini ”fájlokat. A Linux-ban található Conf fájlok ugyanolyanok, mint bármely más szövegfájlok, ezért bármilyen módon strukturálhatók. Az értelmezőtől függ, hogyan értelmezi a.conf ”fájl. A Python ConfigParser modulja képes elemezni a.conf ”fájlok (vagy bármely más véletlenszerű kiterjesztés), feltéve, hogy ezeket a fájlokat INI-kompatibilis konfigurációs nyelven definiálják. Ez a cikk elmagyarázza az olvasást és az írást.conf ”fájlok Linux alatt, a Python 3 legújabb, stabil verziójával. Vegye figyelembe, hogy ha a „.conf ”kiterjesztés ebben a cikkben a„.ini ”kiterjesztés esetén az eredmény ugyanaz lenne. Az alábbiakban ismertetett folyamatnak és kódnak többnyire kompatibilisnek kell lennie a Microsoft Windows rendszerrel is, néhány kisebb különbséggel. Bár ezekre a különbségekre ez a cikk nem tér ki.
ConfigParser modul
A konfigurációs fájl elemzője vagy a ConfigParser egy Python modul, amely lehetővé teszi a Python alkalmazásokban használt konfigurációs fájlok olvasását és írását. Mint fentebb kifejtettük, ez a modul támogatja az INI fájl szintaxisát. Egy nagyon leegyszerűsített „.ini ”/“.conf ”fájl így néz ki.
[DEFAULT]hang = 1
zene = 1
térfogat = 0.8
felbontás = 1920x1080
[Felhasználó]
A # hang értéke 0 (hamis) és 1 (igaz) lehet
hang = 1
; a zene értéke 0 (hamis) és 1 (igaz) lehet
zene = 0
Hangerő = 0.4
felbontás = 1280x720
A példa ".conf "fenti fájl két szakaszból áll, az" ALAPÉRTÉK "és a" Felhasználó ". A Python programokat általában úgy kódolják, hogy a DEFAULT szakaszértékek soha nem változnak. A DEFAULT szakasz az általános vagy egyedi értékek visszaállítására szolgál az alapértelmezett értékekre. A felhasználói szakasz a Python programot használó végfelhasználó által végrehajtott módosításokat tükrözi. Ne feledje, hogy a szakasznevek bármi lehetnek, és egyáltalán nem szükséges az Alapértelmezett szakasz. Ha azonban a „DEFAULT” szakasz megtalálható (a névnek nagybetűvel kell szerepelnie), akkor az alapértelmezett értékek biztonságos megadására szolgál, ha a ConfigParser nem tud elemezni bizonyos változókat. Ezen szakaszok, az alattuk lévő változók és a tartalékértékek kezelésének logikáját magában a Python programban kell meghatározni. Olyan szimbólumok, mint a „#” és a „;” használható a megjegyzések jelölésére a.conf ”fájlokat. A config fájl összes kulcsérték párja nem különbözteti meg a kis- és nagybetűket, általában kisbetűvel írva.
Adattípusok kezelése: ConfigParser
Mielőtt továbblépne a ConfigParser néhány példájára, fontos megértenie az adattípusok kezelését ebben a modulban. A ConfigParser esetében az írott vagy elemzett kód minden része karakterlánc. Nem tehet különbséget számok vagy más formátum között. A programozóknak logikát kell írniuk a programjukba, hogy az „1234” karakterláncot számgá alakítsák az int („1234”) használatával, miközben egy „.conf ”fájl.
Míg a számokká konvertálás az int és a float módszerrel meglehetősen egyszerű feladat, a logikai konvertálás bonyolult lehet, mivel a Python a boolt („any_string”) igaznak tartja. A probléma kiküszöböléséhez feltételes utasításokat használhat egy adott karakterlánc ellenőrzésére. A ConfigParser modul a „getboolean ()” nevű metódust is biztosítja. Ezzel a módszerrel helyesen lehet megkülönböztetni az „igen” / „nem”, „be” / „ki”, „igaz” / „hamis” és az „1” / „0” logikai értékeket, még akkor is, ha karakterláncok. A ConfigParser a getint () és a getfloat () metódusokat is tartalmazza az Ön kényelme érdekében.
Új Conf fájl írása és mentése a ConfigParser használatával
Tegyük fel, hogy a.conf ”a fent említett fájl nem létezik, és a program első indításakor automatikusan létre akarja hozni. Az alábbi kód új „beállításokat hoz létre.conf ”fájl a könyvtárban, ahonnan a Python program futott.
importálja a konfigurációtconfig = configparser.ConfigParser ()
config ['DEFAULT'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
config ['User'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
nyitott ('beállításokkal.conf ',' w '), mint configfile:
konfig.write (configfile)
A fenti kód első állítása a ConfigParser modult importálja. A második utasítás egy szótár-szerű objektumot hoz létre „config” néven. Mostantól a Python szótár szintaxisával meghatározhatja az ezekbe beillesztett szakaszokat és változókat, amint az a következő két állításból kiderül. Végül a „nyitva” utasítás új „beállításokat hoz létre.conf ”fájlt, és a config szakaszokat írja a fájlba.
A fenti kód működik, de van egy kis probléma vele. A program minden futtatásakor új beállításfájlt hoz létre, ami felülírja a felhasználó által a beállításfájlban végzett módosításokat. A probléma megoldásához két feltételt kell ellenőriznie:
- Létezik-e a beállításfájl? Ha nem, akkor csak akkor hozzon létre új beállítási fájlt, ha a fájl nem létezik.
- A beállításfájl létezik, de tartalmaz-e adatot? Üres? Csak akkor írjon új konfigurációs adatokat a beállításfájlba, ha üres.
Az alábbi módosított kód ellenőrzi a két feltételt, és csak akkor hoz létre új beállítási fájlt, ha ez a két feltétel teljesül.
importálja a konfigurációtimport os
config = configparser.ConfigParser ()
config ['DEFAULT'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
config ['User'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
settings_file = os.pálya.dirname (os.pálya.realpath (__ file__))
+ os.sep + "beállítások.konf "
ha nem os.pálya.létezik (beállítások_fájl)
vagy os.stat (beállítások_fájl).st_size == 0:
nyitott ('beállításokkal.conf ',' w '), mint configfile:
konfig.write (configfile)
A fenti kód második állítása az „os” modult importálja. A „settings_file” változó a „settings” elérési útjának teljes útvonalát tárolja.conf ”fájlt kell létrehozni a Python szkript könyvtárában. A következő nyilatkozat két fent említett feltételt ellenőriz. A nyilatkozat első mondata magától értetődő. A második tagmondat azt ellenőrzi, hogy a fájl mérete „0 bájt”. A nulla bájtos fájl egy üres fájlt jelent, amelyben nincsenek adatok tárolva. A kód többi része megegyezik a fenti első példával.
Eddig a fent ismertetett kódminták mentik a config fájlt a Python szkript könyvtárába. Azonban általános gyakorlat és a freedesktop szabvány a konfigurációs fájlok mentése a “.config ”könyvtár az otthoni mappában. Az alábbi kódminta új „beállításokat hoz létre.conf ”fájl a“ ~ /.config / testapp ”mappát.
importálja a konfigurációtimport os
app_name = "testapp"
config_folder = os.pálya.csatlakozni (os.pálya.expanduser ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "beállítások.konf "
full_config_file_path = os.pálya.csatlakozás (config_folder, settings_file)
config = configparser.ConfigParser ()
config ['DEFAULT'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
config ['User'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
ha nem os.pálya.létezik (full_config_file_path)
vagy os.stat (full_config_file_path).st_size == 0:
az open (full_config_file_path, 'w') konfigurációs fájlként:
konfig.write (configfile)
A fenti kód majdnem megegyezik a korábbi példával, kivéve, hogy megváltoztatja a „beállítások helyét.conf ”fájl a“ ~ /.config / testapp / settings.konf ”. A „config_folder” változó eltárolja a létrehozandó alkalmazás mappa teljes elérési útját.config ”könyvtár („ ~ /.config / testapp / ”). Az „os.makedirs ”utasítás csak akkor hoz létre új alkalmazásmappát, ha az még nem létezik. A „full_config_file_path” változó a beállításfájl teljes elérési útját tárolja („~ /.config / testapp / settings.konf ”). A kód további része magától értetődő.
Conf fájl olvasása a ConfigParser használatával
A konfigurációs fájl elemzése elég egyszerű. A ConfigParser megkísérel egy értéket beolvasni get (), getfloat (), getboolean () módszerekkel vagy szótárszintaxissal. Kulcshiba esetén a DEFAULT szakasz értékeit vagy a tartalék értékeket használják. Jó gyakorlat definiálni a DEFAULT szakasz vagy tartalék értékeket a legfontosabb hibák megelőzése érdekében. Használhatja a try-kivétel utasításokat is a hibák elnyomására.
config = configparser.ConfigParser ()konfig.read (teljes_konfig_fájl_útvonal)
is_sound_on = config ['Felhasználó'].getboolean ('hang')
kötet_szint = config ['Felhasználó'].getfloat ('kötet')
felbontás = config ['Felhasználó'] ['felbontás']
# A "False" tartalékértéket figyelmen kívül hagyja, mivel már van DEFAULT szakasz.
# Alapértelmezett szakasz hiányában a tartalék értéket kell használni.
is_music_on = config ['Felhasználó'].getboolean ('zene', hamis)
nyomtatás (is_sound_on, is_music_on, volume_level, resolution)
A fenti kódmintában a „config.read ”utasítás a konfigurációs fájl adatainak olvasására szolgál. A következő állításokban különféle beépített get módszereket és szótári jelöléseket használnak az adatok olvasására. Az „is_music_on” változó deklarációjában a második argumentum tartalékérték (hamis). Vegye figyelembe, hogy a tartalékértékeknek alacsonyabb prioritása lesz, mint az ALAPÉRTELMEZÉS szakaszban meghatározott értékeknek. Egyszerűbben fogalmazva, a tartalékértékeknek nincs hatása, ha kulcs-érték pár már szerepel az ALAPÉRTÉK szakaszban.
Teljes kód
Az alábbiakban a teljes kód ötvözi a konfigurációs fájl első futtatásának létrehozását és a konfigurációs fájl olvasását.
#! / usr / bin / python3importálja a konfigurációt
import os
app_name = "testapp"
config_folder = os.pálya.csatlakozni (os.pálya.expanduser ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "beállítások.konf "
full_config_file_path = os.pálya.csatlakozás (config_folder, settings_file)
config = configparser.ConfigParser ()
config ['DEFAULT'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
config ['User'] = "hang": "1", "zene": "1",
"kötet": "0.8 "," felbontás ":" 1920x1080 "
ha nem os.pálya.létezik (full_config_file_path)
vagy os.stat (full_config_file_path).st_size == 0:
az open (full_config_file_path, 'w') konfigurációs fájlként:
konfig.write (configfile)
konfig.read (teljes_konfig_fájl_útvonal)
is_sound_on = config ['Felhasználó'].getboolean ('hang')
kötet_szint = config ['Felhasználó'].getfloat ('kötet')
felbontás = config ['felhasználó'] ['felbontás']
# A "False" tartalékértéket figyelmen kívül hagyja, mivel már van DEFAULT szakasz.
# Alapértelmezett szakasz hiányában a tartalék értéket kell használni.
is_music_on = config ['Felhasználó'].getboolean ('zene', hamis)
nyomtatás (is_sound_on, is_music_on, volume_level, resolution)
Következtetés
A ConfigParser a Pythonban hasznos módot kínál a parancssori és a GUI Python-alkalmazások beállításainak kezelésére. Ezek a konfigurációs fájlok könnyű szöveges adatbázisokként is használhatók, de nem feltétlenül alkalmasak fejlett adattípusokra, nagy adatkészletekre és nagyszámú lekérdezésre.