Piton

Kako čitati i pisati INI i Conf datoteke pomoću Pythona

Kako čitati i pisati INI i Conf datoteke pomoću Pythona
Programski jezik Python dolazi s korisnim ugrađenim modulom nazvanim "ConfigParser" koji se može koristiti za čisto pisanje konfiguracijskih parametara za aplikacije. ConfigParser koristi dobro definiran i strukturiran konfiguracijski jezik u potpunosti kompatibilan s INI datotekama koje se nalaze u sustavu Microsoft Windows. Te se INI datoteke mogu koristiti i s Python aplikacijama pokrenutim u Linuxu, a pružaju trajni način pohrane i dohvaćanja vrijednosti.

U Linuxu je uobičajenije vidjeti “.conf "nego".ini ”datoteke. Datoteke Conf u Linuxu su poput svih ostalih tekstualnih datoteka i stoga ih se može strukturirati na bilo koji način. O parseru ovisi kako tumači ".datoteka conf. Pythonov modul ConfigParser može raščlaniti “.conf ”(ili bilo koje drugo slučajno proširenje), pod uvjetom da su te datoteke definirane u INI kompatibilnom konfiguracijskom jeziku. Ovaj će članak objasniti čitanje i pisanje “.conf ”u Linuxu koristeći najnoviju stabilnu verziju Pythona 3. Imajte na umu da ako zamijenite sve pojave “.conf ”proširenje u ovom članku s“.ini ”, rezultat bi bio isti. Dolje objašnjeni postupak i kod trebali bi biti uglavnom kompatibilni i s Microsoft Windowsom, s nekoliko manjih razlika. Iako ove razlike neće biti obrađene u ovom članku.

Modul ConfigParser

Analizator konfiguracijske datoteke ili ConfigParser je Python modul koji vam omogućuje čitanje i pisanje konfiguracijskih datoteka koje se koriste u Python aplikacijama. Kao što je gore objašnjeno, ovaj modul podržava sintaksu INI datoteke. Vrlo pojednostavljeno ".ini "/".conf ”datoteka izgleda ovako.

[ZADANO]
zvuk = 1
glazba = 1
volumen = 0.8
razlučivost = 1920x1080
[Korisnik]
# zvuk može imati 0 (netačno) i 1 (tačno) kao moguće vrijednosti
zvuk = 1
; glazba može imati 0 (lažno) i 1 (tačno) kao moguće vrijednosti
glazba = 0
Volumen = 0.4
razlučivost = 1280x720

Primjer “.datoteka conf “ima dva odjeljka,“ DEFAULT ”i“ User ”. Obično su programi Python kodirani na takav način da se zadane vrijednosti odjeljaka nikad ne mijenjaju. Odjeljak DEFAULT koristi se za vraćanje ukupnih ili pojedinačnih vrijednosti na zadane vrijednosti. Korisnički odjeljak odražava promjene koje je napravio krajnji korisnik koji koristi program Python. Napominjemo da nazivi odjeljaka mogu biti bilo što i uopće nije potrebno imati DEFAULT odjeljak. Međutim, kad god je prisutan odjeljak “DEFAULT” (ime treba biti napisano velikim slovom), on će se koristiti za sigurno pružanje zadanih vrijednosti ako ConfigParser ne uspije raščlaniti određene varijable. Logika za rukovanje ovim odjeljcima, varijablama ispod njih i zamjenskim vrijednostima mora biti definirana u samom programu Python. Simboli poput "#" i ";" može se koristiti za označavanje komentara u “.conf ”datoteke. Svi parovi ključ / vrijednost u datoteci konfiguracije ne razlikuju velika i mala slova, obično se pišu malim slovima.

S tipovima podataka obrađuje ConfigParser

Prije nego što nastavite s nekim primjerima ConfigParser-a, važno je razumjeti tipove podataka kojima rukuje ovaj modul. Za ConfigParser svaki je dio napisanog ili raščlanjenog koda niz. Ne može razlikovati brojeve ili bilo koji drugi format. Programeri trebaju zapisati logiku u svoj program kako bi pretvorili niz "1234" u broj pomoću int ("1234") dok čitaju podatke s ".datoteka conf.

Iako je pretvaranje u brojeve pomoću metode int i float prilično jednostavan zadatak, pretvaranje u boolean može biti nezgodno jer Python tretira bool ("any_string") kao True. Da biste prevladali ovaj problem, možete upotrijebiti uvjetne izraze koji provjeravaju određeni niz. Modul ConfigParser također nudi metodu koja se naziva "getboolean ()". Ova metoda može ispravno razlikovati logičke vrijednosti 'yes' / 'no', 'on' / 'off', 'true' / 'false' i '1' / '0', čak i ako su nizovi. ConfigParser također uključuje metode getint () i getfloat () za vašu udobnost.

Pisanje i spremanje nove datoteke Conf pomoću programa ConfigParser

Pretpostavimo da.gore navedena datoteka ne postoji i želite je automatski stvoriti pri prvom pokretanju programa. Kôd u nastavku stvorit će nove „postavke.conf ”u direktoriju iz kojeg je pokrenut program Python.

import configparser
config = configparser.ConfigParser ()
config ['DEFAULT'] = "zvuk": "1", "glazba": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
s otvorenim ('postavkama.conf ',' w ') kao configfile:
konfiguracija.pisanje (configfile)

Prva izjava u gornjem kodu uvozi modul ConfigParser. Druga izjava stvara objekt nalik rječniku pod nazivom "config". Sada možete koristiti standardnu ​​sintaksu rječnika Python za definiranje odjeljaka i varijabli uključenih ispod njih, što je vidljivo iz sljedeće dvije izjave. Na kraju, izjava “s otvorenim” stvara nove “postavke.conf ”i zapisuje konfiguracijske odjeljke u datoteku.

Gore navedeni kod djeluje, ali s njim postoji mali problem. Stvara novu datoteku s postavkama svaki put kada se program pokrene, što rezultira prepisivanjem bilo kojeg uređivanja datoteke postavki koje je izvršio korisnik. Da biste riješili ovaj problem, morate provjeriti dva uvjeta:

Izmijenjeni kôd u nastavku provjerit će dva uvjeta i stvorit će novu datoteku s postavkama samo ako su ta dva uvjeta zadovoljena.

import configparser
uvoz os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "zvuk": "1", "glazba": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
datoteka_nastavka = os.staza.dirname (os.staza.stvarna staza (__ datoteka__))
+ os.sep + "postavke.konf "
ako ne os.staza.postoji (datoteka_postavke)
ili os.stat (datoteka_postavki).st_size == 0:
s otvorenim ('postavkama.conf ',' w ') kao configfile:
konfiguracija.pisati (configfile)

Druga izjava u gornjem kodu uvozi modul “os”. Varijabla “settings_file” pohranjuje puni put do “postavki.conf ”datoteku koja će se stvoriti u direktoriju Python skripte. Sljedeća izjava provjerava dva gore spomenuta uvjeta. Prva klauzula u izjavi sama po sebi objašnjava. Druga klauzula provjerava je li veličina datoteke "0 bajtova". Datoteka s nula bajtova značila bi praznu datoteku u kojoj nisu pohranjeni podaci. Ostatak koda je isti kao i prvi gore navedeni primjer.

Do sada objašnjeni uzorci koda spremaju konfiguracijsku datoteku u direktorij same Python skripte. Međutim, uobičajena je praksa i standard freedesktop-a da spremate konfiguracijske datoteke u ".config ”u početnoj mapi. Uzorak koda u nastavku stvorit će nove „postavke.conf ”u“ ~ /.config / testapp ”.

import configparser
uvoz os
 
app_name = "testapp"
config_folder = os.staza.pridružiti se (os.staza.expanduser ("~"), '.config ', ime_aplike)
os.makedir (mapa_konfiguracije, postoji_ok = Istina)
settings_file = "postavke.konf "
full_config_file_path = os.staza.pridruži se (mapa_konfiguracije, datoteka_postavki)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "zvuk": "1", "glazba": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
 
ako ne os.staza.postoji (full_config_file_path)
ili os.stat (full_config_file_path).veličina_st == 0:
s otvorenim (full_config_file_path, 'w') kao configfile:
konfiguracija.pisanje (configfile)

Gornji kod je gotovo isti kao i raniji primjer, osim što mijenja mjesto "postavki.conf ”u“ ~ /.config / testapp / postavke.konf ". Varijabla "config_folder" pohranjuje puni put do mape aplikacije koja će se stvoriti u ".config ”direktorij (“ ~ /.config / testapp / ”). „Os.makedirs ”izradit će novu mapu aplikacije samo ako ona već ne postoji. Varijabla “full_config_file_path” pohranjuje puni put datoteke postavki (“~ /.config / testapp / postavke.conf "). Ostatak koda je samorazumljiv.

Čitanje datoteke Conf pomoću programa ConfigParser

Raščlanjivanje konfiguracijske datoteke prilično je jednostavno. ConfigParser pokušava pročitati vrijednost pomoću metoda get (), getfloat (), getboolean () ili sintakse rječnika. U slučaju pogreške ključa koriste se vrijednosti iz odjeljka DEFAULT ili zamjenske vrijednosti. Dobra je praksa definirati DEFAULT odjeljak ili zamjenske vrijednosti kako biste spriječili ključne pogreške. Za suzbijanje pogrešaka možete koristiti i izjave try-osim.

config = configparser.ConfigParser ()
konfiguracija.pročitati (full_config_file_path)
 
is_sound_on = config ['Korisnik'].getboolean ('zvuk')
volume_level = config ['User'].getfloat ('volumen')
razlučivost = config ['Korisnik'] ['razlučivost']
 
# Rezervna vrijednost "False" zanemarit će se jer već postoji DEFAULT odjeljak.
# Ako nema odjeljka DEFAULT, rezervna vrijednost će se pravilno koristiti.
is_music_on = config ['Korisnik'].getboolean ('glazba', netačno)
 
ispis (is_sound_on, is_music_on, volume_level, razlučivost)

U gornjem uzorku koda, “config.read ”se koristi za čitanje podataka iz konfiguracijske datoteke. U sljedećim se izjavama za čitanje podataka koriste razne ugrađene metode dobivanja i zapisi u rječniku. U deklaraciji varijable “is_music_on”, drugi je argument zamjenska vrijednost (False). Imajte na umu da će zamjenske vrijednosti imati niži prioritet od vrijednosti definiranih u odjeljku DEFAULT. Jednostavno rečeno, zamjenske vrijednosti neće imati učinka kada je par ključ / vrijednost već prisutan u odjeljku DEFAULT.

Puni kod

Ispod je cijeli kôd koji kombinira i prvo pokretanje izrade konfiguracijske datoteke i čitanje konfiguracijske datoteke.

#! / usr / bin / python3
import configparser
uvoz os
 
app_name = "testapp"
config_folder = os.staza.pridružiti se (os.staza.expanduser ("~"), '.config ', ime_aplike)
os.makedir (mapa_konfiguracije, postoji_ok = Istina)
settings_file = "postavke.konf "
full_config_file_path = os.staza.pridruži se (mapa_konfiguracije, datoteka_postavki)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "zvuk": "1", "glazba": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," razlučivost ":" 1920x1080 "
 
ako ne os.staza.postoji (full_config_file_path)
ili os.stat (full_config_file_path).veličina_st == 0:
s otvorenim (full_config_file_path, 'w') kao configfile:
konfiguracija.pisanje (configfile)
 
konfiguracija.pročitati (full_config_file_path)
is_sound_on = config ['Korisnik'].getboolean ('zvuk')
volume_level = config ['Korisnik'].getfloat ('volumen')
razlučivost = config ['Korisnik'] ['razlučivost']
 
# Rezervna vrijednost "False" zanemarit će se jer već postoji DEFAULT odjeljak.
# Ako nema odjeljka DEFAULT, rezervna vrijednost će se pravilno koristiti.
is_music_on = config ['Korisnik'].getboolean ('glazba', netačno)
 
ispis (is_sound_on, is_music_on, volume_level, razlučivost)

Zaključak

ConfigParser u Pythonu pruža koristan način za rukovanje postavkama i naredbenog retka i GUI Python aplikacija. Te se konfiguracijske datoteke mogu koristiti i kao lagane baze podataka temeljene na tekstu, ali možda nisu prikladne za napredne tipove podataka, velike skupove podataka i velik broj upita.

Emulirajte klikove mišem lebdeći mišem bez klika u sustavu Windows 10
Korištenje miša ili tipkovnice u pogrešnom držanju pretjerane upotrebe može rezultirati mnogim zdravstvenim problemima, uključujući naprezanje, sindro...
Dodajte geste miša u sustav Windows 10 pomoću ovih besplatnih alata
Posljednjih godina računala i operativni sustavi uvelike su se razvili. Bilo je vrijeme kada su korisnici morali koristiti naredbe za navigaciju kroz ...
Kontrolirajte i upravljajte kretanjem miša između više monitora u sustavu Windows 10
Dvostruki zaslon upravitelja miša omogućuje vam kontrolu i konfiguriranje kretanja miša između više monitora, usporavajući njegovo kretanje blizu gran...