Piton

INI és Conf fájlok olvasása és írása a Python használatával

INI és Conf fájlok olvasása és írása a Python használatával
A Python programozási nyelv tartalmaz egy hasznos beépített modult, a „ConfigParser” nevet, amellyel tisztán lehet írni az alkalmazások konfigurációs paramétereit. A ConfigParser jól definiált és strukturált konfigurációs nyelvet használ, amely teljesen kompatibilis a Microsoft Windows rendszerben található INI fájlokkal. Ezek az INI fájlok a Linux alatt futó Python alkalmazásokkal is használhatók, és állandó módon biztosítják az értékek tárolását és visszakeresését.

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ót
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 "
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:

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ót
import 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ó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)

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 / python3
importá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.

Az egér középső gombja nem működik a Windows 10 rendszerben
A középső egérgomb segít átgörgetni a hosszú weboldalakat és a sok adatot tartalmazó képernyőket. Ha ez leáll, akkor a billentyűzet segítségével görge...
Hogyan lehet megváltoztatni a bal és jobb egérgombokat a Windows 10 PC-n
Elég általános, hogy az összes számítógépes egéreszközt ergonómikusan a jobbkezes felhasználók számára tervezték. De vannak olyan egéreszközök, amelye...
Az egérkattintások emulálása az egérrel a Clickless Mouse használatával a Windows 10 rendszerben
Ha az egeret vagy a billentyűzetet nem megfelelő testtartásban, túlzott használat mellett használhatja, számos egészségügyi problémát okozhat, beleért...