Krajta

Jak číst a zapisovat soubory INI a Conf pomocí Pythonu

Jak číst a zapisovat soubory INI a Conf pomocí Pythonu
Programovací jazyk Python je dodáván s užitečným vestavěným modulem nazvaným „ConfigParser“, který lze použít k čistému zápisu konfiguračních parametrů pro aplikace. ConfigParser používá dobře definovaný a strukturovaný konfigurační jazyk plně kompatibilní se soubory INI nalezenými v systému Microsoft Windows. Tyto soubory INI lze použít také s aplikacemi Pythonu spuštěnými v Linuxu a poskytují trvalý způsob ukládání a načítání hodnot.

V Linuxu je častější vidět „.conf “soubory než„.ini “soubory. Soubory Conf v systému Linux jsou stejně jako jiné textové soubory, a proto je lze libovolně strukturovat. Závisí to na analyzátoru, jak interpretuje „.conf “soubor. Pythonův modul ConfigParser může analyzovat „.conf “soubory (nebo jakékoli jiné náhodné rozšíření), pokud jsou tyto soubory definovány v konfiguračním jazyce kompatibilním s INI. Tento článek vysvětlí čtení a psaní „.conf ”soubory v Linuxu pomocí nejnovější stabilní verze Pythonu 3. Všimněte si, že pokud nahradíte všechny výskyty „.conf “v tomto článku s„.ini “, výsledek by byl stejný. Proces a kód vysvětlený níže by měly být většinou kompatibilní také s Microsoft Windows, s několika drobnými rozdíly. Ačkoli tyto rozdíly nebudou v tomto článku pokryty.

Modul ConfigParser

Analyzátor konfiguračních souborů nebo ConfigParser je modul Pythonu, který umožňuje číst a zapisovat konfigurační soubory používané v aplikacích Pythonu. Jak je vysvětleno výše, tento modul podporuje syntaxi souborů INI. Velmi zjednodušující „.ini /.conf “soubor vypadá takto.

[VÝCHOZÍ]
zvuk = 1
hudba = 1
objem = 0.8
rozlišení = 1920x1080
[Uživatel]
# zvuk může mít 0 (nepravdivé) a 1 (pravdivé) jako možné hodnoty
zvuk = 1
; hudba může mít jako možné hodnoty 0 (false) a 1 (true)
hudba = 0
Hlasitost = 0.4
rozlišení = 1280x720

Příklad ".soubor conf má výše dvě části, „DEFAULT“ a „User“. Programy v Pythonu jsou obvykle kódovány takovým způsobem, že hodnoty DEFAULT sekce se nikdy nezmění. Sekce DEFAULT se používá k obnovení celkových nebo jednotlivých hodnot na výchozí hodnoty. Sekce pro uživatele odráží změny provedené koncovým uživatelem, který používá program Python. Názvy sekcí mohou být jakékoli a není nutné mít vůbec DEFAULT sekci. Kdykoli je však k dispozici část „VÝCHOZÍ“ (název by měl být psán velkými písmeny), bude použita k bezpečnému poskytnutí výchozích hodnot, pokud ConfigParser nedokáže analyzovat určité proměnné. Logiku zpracování těchto sekcí, proměnných pod nimi a záložních hodnot je třeba definovat v samotném programu Python. Symboly jako „#“ a „;“ lze použít k označení komentářů v „.conf “soubory. Všechny páry klíč – hodnota v konfiguračním souboru nerozlišují velká a malá písmena, obvykle jsou psána malými písmeny.

Zpracování datových typů pomocí nástroje ConfigParser

Před pokračováním s některými příklady ConfigParser je důležité porozumět zpracování datových typů tímto modulem. Pro ConfigParser je každá část napsaného nebo analyzovaného kódu řetězec. Nelze rozlišovat mezi čísly nebo jiným formátem. Programátoři musí do svého programu zapsat logiku, aby při čtení dat z „konvertovali“ řetězec „1234“ na číslo pomocí int („1234“).conf “soubor.

Zatímco převod na čísla pomocí metody int a float je docela snadný úkol, převod na boolean může být složitý, protože Python považuje bool („any_string“) za True. K překonání tohoto problému můžete použít kontrolu podmíněných příkazů pro konkrétní řetězec. Modul ConfigParser také poskytuje metodu nazvanou „getboolean ()“. Tato metoda může správně rozlišovat booleovské hodnoty 'yes' / 'no', 'on' / 'off', 'true' / 'false' a '1' / '0', i když se jedná o řetězce. ConfigParser také obsahuje metody getint () a getfloat () pro vaše pohodlí.

Zápis a uložení nového souboru Conf pomocí nástroje ConfigParser

Předpokládejme „.conf ”výše zmíněný soubor neexistuje a chcete jej vytvořit automaticky při prvním spuštění programu. Níže uvedený kód vytvoří nové „nastavení.conf ”soubor v adresáři, ze kterého byl spuštěn program Python.

importujte konfigurátor
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
config ['Uživatel'] = "zvuk": "1", "hudba": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
s otevřeným ('nastavení.conf ',' w ') jako konfigurační soubor:
konfigurace.write (configfile)

První příkaz v kódu výše importuje modul ConfigParser. Druhý příkaz vytvoří slovníkový objekt s názvem „config“. Nyní můžete použít standardní syntaxi slovníku Pythonu k definování sekcí a proměnných, které jsou pod nimi, jak je patrné z následujících dvou příkazů. Nakonec příkaz „s otevřeným“ vytvoří nové „nastavení.conf ”a zapíše do něj konfigurační sekce.

Výše uvedený kód funguje, ale je s ním malý problém. Při každém spuštění programu vytvoří nový soubor nastavení, což má za následek přepsání všech uživatelských úprav souboru nastavení. Chcete-li tento problém vyřešit, musíte zkontrolovat dvě podmínky:

Upravený kód níže zkontroluje tyto dvě podmínky a vytvoří nový soubor nastavení, pouze pokud jsou tyto dvě podmínky splněny.

importujte konfigurátor
import os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
config ['Uživatel'] = "zvuk": "1", "hudba": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
nastavení_soubor = os.cesta.dirname (os.cesta.realpath (__ soubor__))
+ os.sep + "nastavení.conf "
pokud ne os.cesta.existuje (soubor_nastavení)
nebo os.stat (soubor_nastavení).st_size == 0:
s otevřeným ('nastavení.conf ',' w ') jako konfigurační soubor:
konfigurace.write (configfile)

Druhý příkaz v kódu výše importuje modul „os“. Proměnná „settings_file“ ukládá celou cestu k „nastavení.conf ”soubor, který má být vytvořen v adresáři skriptu Pythonu. Následující příkaz zkontroluje dvě výše uvedené podmínky. První věta v prohlášení je samozřejmá. Druhá klauzule kontroluje, zda je velikost souboru „0 bajtů“. Soubor s nulovým bajtem by znamenal prázdný soubor bez uložených dat. Zbytek kódu je stejný jako první příklad uvedený výše.

Výše popsané ukázky kódu zatím ukládají konfigurační soubor do adresáře samotného skriptu Pythonu. Je však běžnou praxí a standardem freedesktop ukládat konfigurační soubory do.config ”adresář v domovské složce. Následující ukázka kódu vytvoří nové „nastavení.conf “soubor v„ ~ /.složka config / testapp ”.

importujte konfigurátor
import os
 
app_name = "testapp"
config_folder = os.cesta.připojit (os.cesta.expanduser ("~"), '.config ', název_aplikace)
os.makedirs (config_folder, exist_ok = True)
settings_file = "nastavení.conf "
full_config_file_path = os.cesta.připojit (config_folder, settings_file)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
config ['Uživatel'] = "zvuk": "1", "hudba": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
 
pokud ne os.cesta.existuje (full_config_file_path)
nebo os.stat (full_config_file_path).st_size == 0:
s otevřeným (full_config_file_path, 'w') jako konfiguračním souborem:
konfigurace.write (configfile)

Výše uvedený kód je téměř stejný jako předchozí příklad, kromě změny umístění „nastavení.conf “soubor do„ ~ /.config / testapp / nastavení.conf “. Proměnná „config_folder“ ukládá úplnou cestu ke složce aplikace, která má být vytvořena v „.adresář config “(„ ~ /.config / testapp / ”). „Os.Příkaz makedirs ”vytvoří novou složku aplikace, pouze pokud již neexistuje. Proměnná „full_config_file_path“ ukládá celou cestu k souboru nastavení („~ /.config / testapp / nastavení.conf “). Zbytek kódu je vysvětlující.

Čtení souboru Conf pomocí nástroje ConfigParser

Analýza konfiguračního souboru je docela přímá. ConfigParser se pokusí načíst hodnotu pomocí metod get (), getfloat (), getboolean () nebo syntaxe slovníku. V případě chyby klíče se použijí hodnoty z části VÝCHOZÍ nebo záložní hodnoty. Je dobrým zvykem definovat DEFAULT sekce nebo záložní hodnoty, aby se zabránilo klíčovým chybám. K potlačení chyb můžete použít i příkazy try-except.

config = configparser.ConfigParser ()
konfigurace.read (full_config_file_path)
 
is_sound_on = config ['Uživatel'].getboolean ('zvuk')
volume_level = config ['Uživatel'].getfloat ('objem')
resolution = config ['Uživatel'] ['rozlišení']
 
# Záložní hodnota „False“ bude ignorována, protože již existuje VÝCHOZÍ část.
# Při absenci DEFAULT sekce bude náležitě použita záložní hodnota.
is_music_on = config ['Uživatel'].getboolean ('music', False)
 
tisk (is_sound_on, is_music_on, volume_level, resolution)

V ukázce kódu výše „config.Příkaz read ”se používá ke čtení dat z konfiguračního souboru. V následujících příkazech se ke čtení dat používají různé vestavěné metody get a slovníkové notace. V deklaraci proměnné „is_music_on“ je druhým argumentem záložní hodnota (False). Všimněte si, že záložní hodnoty budou mít nižší prioritu než hodnoty definované v části VÝCHOZÍ. Zjednodušeně řečeno, záložní hodnoty nebudou mít žádný účinek, pokud je v sekci DEFAULT již pár klíč – hodnota k dispozici.

Celý kód

Níže je uveden celý kód kombinující jak první spuštění vytvoření konfiguračního souboru, tak i čtení konfiguračního souboru.

#! / usr / bin / python3
importujte konfigurátor
import os
 
app_name = "testapp"
config_folder = os.cesta.připojit (os.cesta.expanduser ("~"), '.config ', název_aplikace)
os.makedirs (config_folder, exist_ok = True)
settings_file = "nastavení.conf "
full_config_file_path = os.cesta.připojit (config_folder, settings_file)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
config ['Uživatel'] = "zvuk": "1", "hudba": "1",
"volume": "0.8 "," rozlišení ":" 1920x1080 "
 
pokud ne os.cesta.existuje (full_config_file_path)
nebo os.stat (full_config_file_path).st_size == 0:
s otevřeným (full_config_file_path, 'w') jako configfile:
konfigurace.write (configfile)
 
konfigurace.read (full_config_file_path)
is_sound_on = config ['Uživatel'].getboolean ('zvuk')
volume_level = config ['Uživatel'].getfloat ('objem')
resolution = config ['Uživatel'] ['rozlišení']
 
# Záložní hodnota „False“ bude ignorována, protože již existuje VÝCHOZÍ část.
# Při absenci DEFAULT sekce bude náležitě použita záložní hodnota.
is_music_on = config ['Uživatel'].getboolean ('music', False)
 
tisk (is_sound_on, is_music_on, volume_level, resolution)

Závěr

ConfigParser v Pythonu poskytuje užitečný způsob, jak zvládnout nastavení jak příkazového řádku, tak i aplikací Pythonu GUI. Tyto konfigurační soubory lze také použít jako odlehčené textové databáze, ale nemusí být vhodné pro pokročilé datové typy, velké datové sady a velký počet dotazů.

V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...
Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...