Python

Ako čítať a zapisovať súbory INI a Conf pomocou Pythonu

Ako čítať a zapisovať súbory INI a Conf pomocou Pythonu
Programovací jazyk Python je dodávaný s užitočným zabudovaným modulom nazvaným „ConfigParser“, ktorý je možné použiť na čisté písanie konfiguračných parametrov aplikácií. ConfigParser používa dobre definovaný a štruktúrovaný konfiguračný jazyk, ktorý je plne kompatibilný so súbormi INI v systéme Microsoft Windows. Tieto súbory INI je možné použiť aj s aplikáciami Pythonu spustenými v systéme Linux a poskytujú trvalý spôsob ukladania a načítania hodnôt.

V systéme Linux je bežnejšie vidieť „.conf “súbory ako„.ini “súbory. Súbory Conf v systéme Linux sú rovnako ako akékoľvek iné textové súbory, a preto ich možno štruktúrovať akýmkoľvek spôsobom. Závisí to od syntaktického analyzátora, ako interpretuje „.conf “súbor. Modul ConfigParser v jazyku Python dokáže analyzovať „.conf “(alebo iná náhodná prípona), ak sú definované v konfiguračnom jazyku kompatibilnom s INI. Tento článok vysvetľuje čítanie a písanie „.conf ”súbory v Linuxe pomocou najnovšej stabilnej verzie Pythonu 3. Upozorňujeme, že ak nahradíte všetky výskyty slova „.conf “v tomto článku s„.ini “, výsledok by bol rovnaký. Proces a kód vysvetlený nižšie by mali byť väčšinou kompatibilné aj s Microsoft Windows, s niekoľkými malými rozdielmi. Aj keď sa na tieto rozdiely tento článok nebudeme venovať.

Modul ConfigParser

Analyzátor konfiguračných súborov alebo ConfigParser je modul Pythonu, ktorý umožňuje čítať a zapisovať konfiguračné súbory používané v aplikáciách Pythonu. Ako bolo vysvetlené vyššie, tento modul podporuje syntax súboru INI. Veľmi zjednodušujúce “.ini “/„.conf “súbor vyzerá takto.

[VÝCHODNÉ]
zvuk = 1
hudba = 1
objem = 0.8
rozlíšenie = 1920x1080
[Užívateľ]
# zvuk môže mať ako možnú hodnotu 0 (nepravdivý) a 1 (pravý)
zvuk = 1
; hudba môže mať ako možné hodnoty 0 (nepravda) a 1 (pravda)
hudba = 0
Objem = 0.4
rozlíšenie = 1280x720

Príklad „.conf “vyššie má dve sekcie,„ DEFAULT “a„ User “. Programy v jazyku Python sú zvyčajne kódované takým spôsobom, aby sa hodnoty DEFAULT sekcie nikdy nezmenili. Časť DEFAULT sa používa na resetovanie celkových alebo jednotlivých hodnôt na predvolené hodnoty. Sekcia pre používateľov odráža zmeny vykonané koncovým používateľom, ktorý používa program Python. Upozorňujeme, že názvy sekcií môžu byť akékoľvek a vôbec nie je potrebné mať sekciu DEFAULT. Kedykoľvek je však k dispozícii sekcia „DEFAULT“ (názov by mal byť napísaný veľkými písmenami), bude použitá na bezpečné poskytnutie predvolených hodnôt, ak program ConfigParser nedokáže analyzovať určité premenné. Logiku spracovania týchto sekcií, ich premenných a záložných hodnôt je potrebné definovať v samotnom programe Python. Symboly ako „#“ a „;“ možno použiť na označenie komentárov v.conf “súbory. Všetky páry kľúč - hodnota v konfiguračnom súbore nerozlišujú veľké a malé písmená, zvyčajne sú napísané malými písmenami.

Spracovanie dátových typov programom ConfigParser

Predtým, ako začnete s niektorými príkladmi nástroja ConfigParser, je dôležité porozumieť zaobchádzaniu s dátovými typmi týmto modulom. Pre ConfigParser je každá časť napísaného alebo analyzovaného kódu reťazec. Nemôže rozlišovať medzi číslami alebo iným formátom. Programátori musia do svojho programu napísať logiku, aby mohli pri čítaní údajov z reťazca „konvertovať reťazec„ 1234 “na číslo pomocou znaku int („ 1234 “) pomocou reťazca int („ 1234 “).conf “súbor.

Aj keď je prevod na čísla pomocou metódy int a float celkom ľahká úloha, prevod na boolean môže byť zložitý, pretože Python považuje bool („any_string“) za True. Na prekonanie tohto problému môžete použiť kontrolu podmienečných príkazov na vyhľadanie konkrétneho reťazca. Modul ConfigParser tiež poskytuje metódu nazvanú „getboolean ()“. Táto metóda dokáže správne rozlíšiť booleovské hodnoty „áno“ / „nie“, „zapnuté“ / „vypnuté“, „pravdivé“ / „nepravdivé“ a „1“ / „0“, aj keď ide o reťazce. Program ConfigParser pre vaše pohodlie tiež obsahuje metódy getint () a getfloat ().

Zápis a uloženie nového súboru Conf pomocou nástroja ConfigParser

Predpokladajme „.conf “vyššie uvedený súbor neexistuje a chcete ho vytvoriť automaticky pri prvom spustení programu. Nasledujúci kód vytvorí nové „nastavenia.conf “v adresári, z ktorého bol spustený program Python.

import konfiguračného servera
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
s otvorenými ('nastavenia.conf ',' w ') ako konfiguračný súbor:
konfigur.write (configfile)

Prvý príkaz v kóde vyššie importuje modul ConfigParser. Druhý príkaz vytvára objekt podobný slovníku s názvom „config“. Teraz môžete použiť štandardnú syntax slovníka Python na definovanie sekcií a premenných, ktoré sú pod nimi zahrnuté, čo je zrejmé z nasledujúcich dvoch príkazov. Napokon vyhlásenie „s otvoreným“ vytvorí nové „nastavenie.conf “a do súboru zapíše konfiguračné sekcie.

Vyššie uvedený kód funguje, ale je s ním malý problém. Pri každom spustení programu vytvorí nový súbor nastavení, čo má za následok prepísanie akýchkoľvek úprav súboru nastavení vykonaných používateľom. Ak chcete vyriešiť tento problém, musíte skontrolovať dve podmienky:

Upravený kód nižšie skontroluje tieto dve podmienky a nový súbor nastavení vytvorí, iba ak sú tieto dve podmienky splnené.

import konfiguračného servera
import os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
nastavenia_súbor = os.cesta.dirname (os.cesta.realpath (__ file__))
+ os.sep + "nastavenia.conf "
ak nie os.cesta.existuje (súbor_nastavení)
alebo os.stat (nastavenia_súbor).st_size == 0:
s otvorenými ('nastavenia.conf ',' w ') ako konfiguračný súbor:
konfigur.write (configfile)

Druhý príkaz v kóde vyššie importuje modul „os“. Premenná „settings_file“ ukladá celú cestu k nastaveniam.conf ”, ktorý sa má vytvoriť v adresári skriptu Python. Nasledujúci príkaz kontroluje dve podmienky uvedené vyššie. Prvá veta vo vyhlásení je jasná. Druhá veta kontroluje, či je veľkosť súboru „0 bajtov“. Súbor s nulovým bajtom by znamenal prázdny súbor, v ktorom nie sú uložené žiadne údaje. Zvyšok kódu je rovnaký ako prvý príklad uvedený vyššie.

Zatiaľ vyššie vysvetlené ukážky kódu ukladajú konfiguračný súbor do adresára samotného skriptu Python. Je však bežnou praxou a štandardom freedesktop je ukladanie konfiguračných súborov do priečinka „.config ”adresár v domovskom priečinku. Ukážka kódu nižšie vytvorí nové „nastavenia.conf “súbor v„ ~ /.priečinok config / testapp ”.

import konfiguračného servera
import os
 
app_name = "testapp"
config_folder = os.cesta.pripojiť sa (os.cesta.expanduser ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "nastavenia.conf "
full_config_file_path = os.cesta.join (config_folder, settings_file)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
 
ak nie os.cesta.existuje (full_config_file_path)
alebo os.stat (full_config_file_path).st_size == 0:
s otvoreným (full_config_file_path, 'w') ako konfiguračným súborom:
konfigur.write (configfile)

Vyššie uvedený kód je takmer rovnaký ako predchádzajúci príklad, okrem zmeny umiestnenia „nastavení.conf “súbor do„ ~ /.config / testapp / nastavenia.conf “. Premenná „config_folder“ ukladá celú cestu k priečinku aplikácie, ktorý sa má vytvoriť v „.adresár config “(„ ~ /.config / testapp / ”). „Os.Príkaz makedirs ”vytvorí nový priečinok s aplikáciami, iba ak ešte neexistuje. Premenná „full_config_file_path“ ukladá celú cestu k súboru nastavení („~ /.config / testapp / nastavenia.konf “). Zvyšok kódu je samozrejmý.

Čítanie súboru Conf pomocou nástroja ConfigParser

Analýza konfiguračného súboru je celkom jednoduchá. ConfigParser sa pokúsi načítať hodnotu pomocou metód get (), getfloat (), getboolean () alebo syntaxe slovníka. V prípade chyby klávesu sa použijú hodnoty z časti DEFAULT alebo záložné hodnoty. Je dobrým zvykom definovať DEFAULT sekcie alebo záložné hodnoty, aby sa zabránilo kľúčovým chybám. Na potlačenie chýb môžete použiť aj výrazy okrem pokusu.

config = configparser.ConfigParser ()
konfigur.prečítať (full_config_file_path)
 
is_sound_on = config ['Používateľ'].getboolean ('zvuk')
volume_level = config ['User'].getfloat ('objem')
resolution = config ['Užívateľ'] ['rozlíšenie']
 
# Záložná hodnota „False“ bude ignorovaná, pretože už existuje VÝCHODNÁ sekcia.
# Ak chýba sekcia DEFAULT, náhradná hodnota sa náležite použije.
is_music_on = config ['Užívateľ'].getboolean ('hudba', nepravda)
 
tlač (is_sound_on, is_music_on, volume_level, resolution)

V ukážke kódu vyššie „config.Príkaz read sa používa na načítanie údajov z konfiguračného súboru. V nasledujúcich príkazoch sa na čítanie údajov používajú rôzne vstavané metódy get a zápisy v slovníku. V deklarácii premennej „is_music_on“ je druhým argumentom záložná hodnota (False). Upozorňujeme, že záložné hodnoty budú mať nižšiu prioritu ako hodnoty definované v sekcii DEFAULT. Zjednodušene povedané, záložné hodnoty nebudú mať žiadny vplyv, keď je pár kľúč - hodnota už prítomný v sekcii DEFAULT.

Celý kód

Ďalej je uvedený celý kód kombinujúci vytváranie konfiguračného súboru pri prvom spustení a čítanie konfiguračného súboru.

#! / usr / bin / python3
import konfiguračného servera
import os
 
app_name = "testapp"
config_folder = os.cesta.pripojiť sa (os.cesta.expanduser ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "nastavenia.conf "
full_config_file_path = os.cesta.join (config_folder, settings_file)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," rozlíšenie ":" 1920x1080 "
 
ak nie os.cesta.existuje (full_config_file_path)
alebo os.stat (full_config_file_path).st_size == 0:
s otvoreným (full_config_file_path, 'w') ako konfiguračným súborom:
konfigur.write (configfile)
 
konfigur.prečítať (full_config_file_path)
is_sound_on = config ['Používateľ'].getboolean ('zvuk')
volume_level = config ['User'].getfloat ('objem')
resolution = config ['Užívateľ'] ['rozlíšenie']
 
# Záložná hodnota „False“ bude ignorovaná, pretože už existuje VÝCHODNÁ sekcia.
# Ak chýba sekcia DEFAULT, náhradná hodnota sa náležite použije.
is_music_on = config ['Užívateľ'].getboolean ('hudba', nepravda)
 
tlač (is_sound_on, is_music_on, volume_level, resolution)

Záver

ConfigParser v Pythone poskytuje užitočný spôsob, ako zvládnuť nastavenia aplikácií príkazového riadku aj GUI Python. Tieto konfiguračné súbory možno použiť aj ako ľahké textové databázy, ale nemusia byť vhodné pre pokročilé dátové typy, veľké množiny údajov a veľký počet dotazov.

Trackpad a ukazovateľ myši AppyMouse na obrazovke pre tablety so systémom Windows
Používateľom tabletov často chýba ukazovateľ myši, najmä keď notebooky bežne používajú. Dotykové smartphony a tablety majú veľa výhod a jediným obmedz...
Stredné tlačidlo myši nefunguje v systéme Windows 10
The stredné tlačidlo myši pomáha vám prechádzať dlhé webové stránky a obrazovky s množstvom údajov. Ak sa to zastaví, budete nakoniec používať klávesn...
Ako zmeniť ľavé a pravé tlačidlo myši na počítači so systémom Windows 10
Je úplnou normou, že všetky zariadenia počítačových myší sú ergonomicky navrhnuté pre pravákov. Existujú však dostupné myšacie zariadenia, ktoré sú šp...