Python

Kako brati in pisati datoteke INI in Conf z uporabo Pythona

Kako brati in pisati datoteke INI in Conf z uporabo Pythona
Programski jezik Python je opremljen s koristnim vgrajenim modulom, imenovanim "ConfigParser", ki se lahko uporablja za čisto pisanje konfiguracijskih parametrov za aplikacije. ConfigParser uporablja natančno definiran in strukturiran konfiguracijski jezik, ki je popolnoma združljiv z datotekami INI v sistemu Microsoft Windows. Te datoteke INI je mogoče uporabiti tudi z aplikacijami Python, ki se izvajajo v Linuxu, in zagotavljajo trajen način shranjevanja in pridobivanja vrednosti.

V Linuxu je bolj pogosto videti ".conf "kot".ini ”. Datoteke Conf v Linuxu so tako kot druge besedilne datoteke, zato jih je mogoče strukturirati na kakršen koli način. Od razčlenjevalnika je odvisno, kako razlaga ".conf “. Pythonov modul ConfigParser lahko razčleni “.tudi datoteke conf (ali katero koli drugo naključno pripono), pod pogojem, da so te datoteke definirane v konfiguracijskem jeziku, združljivem z INI. Ta članek bo razložil branje in pisanje “.conf ”v Linuxu z najnovejšo stabilno različico Python 3. Če zamenjate vse pojavitve ».conf “v tem članku z“.ini ”, bi bil rezultat enak. Spodaj opisani postopek in koda bi morali biti večinoma združljivi tudi z Microsoft Windows, z nekaj manjšimi razlikami. Čeprav te razlike v tem članku ne bodo zajete.

Modul ConfigParser

Razčlenjevalnik konfiguracijske datoteke ali ConfigParser je modul Python, ki omogoča branje in pisanje konfiguracijskih datotek, ki se uporabljajo v aplikacijah Python. Kot je razloženo zgoraj, ta modul podpira sintakso datoteke INI. Zelo poenostavljeno.ini "/".conf "izgleda tako.

[PRIPOROČILO]
zvok = 1
glasba = 1
prostornina = 0.8
ločljivost = 1920x1080
[Uporabnik]
# zvok ima lahko 0 (napačno) in 1 (resnično) kot možni vrednosti
zvok = 1
; glasba ima lahko 0 (napačno) in 1 (resnično) kot možni vrednosti
glasba = 0
Glasnost = 0.4
ločljivost = 1280x720

Primer „.datoteka conf ima dva razdelka, “DEFAULT” in “User”. Programi Python so običajno kodirani tako, da se vrednosti odseka DEFAULT nikoli ne spremenijo. Odsek DEFAULT se uporablja za ponastavitev splošnih ali posameznih vrednosti na privzete vrednosti. V razdelku uporabnik so prikazane spremembe končnega uporabnika, ki uporablja program Python. Upoštevajte, da so imena razdelkov lahko katera koli in sploh ni nujno, da imate razdelek PRIROČNIK. Kadar pa je prisoten razdelek »PRIROČNO« (ime mora biti napisano z velikimi črkami), bo uporabljeno za varno podajanje privzetih vrednosti, če ConfigParser ne uspe razčleniti nekaterih spremenljivk. Logiko obravnavanja teh odsekov, spremenljivk pod njimi in nadomestnih vrednosti je treba določiti v samem programu Python. Simbola, kot sta "#" in ";" lahko uporabite za označevanje komentarjev v.conf “. Vsi pari ključ / vrednost v konfiguracijski datoteki ne razlikujejo med velikimi in malimi črkami, običajno so zapisani z malimi črkami.

S podatkovnimi vrstami ravna ConfigParser

Preden nadaljujete z nekaj primeri programa ConfigParser, je pomembno razumeti tipe podatkov, ki jih obravnava ta modul. Za ConfigParser je vsak del napisane ali razčlenjene kode niz. Ne more razlikovati med številkami ali drugimi oblikami. Programerji morajo v svoj program zapisati logiko za pretvorbo niza »1234« v število z uporabo int (»1234«) med branjem podatkov iz ».conf “.

Medtem ko je pretvorba v številke z uporabo metode int in float precej enostavna naloga, je pretvorba v logično vrednost lahko zapletena, saj Python bool ("any_string") obravnava kot True. Če želite odpraviti to težavo, lahko s pogojnimi stavki preverite določen niz. Modul ConfigParser ponuja tudi metodo, imenovano "getboolean ()". Ta metoda lahko pravilno razlikuje logične vrednosti "da" / "ne", "vklopljeno" / "izključeno", "resnično" / "napačno" in "1" / "0", tudi če so nizi. ConfigParser za vaše udobje vključuje tudi metodi getint () in getfloat ().

Pisanje in shranjevanje nove datoteke Conf z uporabo programa ConfigParser

Predpostavimo, da.zgoraj omenjena datoteka ne obstaja in jo želite ustvariti samodejno ob prvem zagonu programa. Spodnja koda bo ustvarila nove »nastavitve.conf “v imeniku, iz katerega je bil zagnan program Python.

uvozi configparser
config = configparser.ConfigParser ()
config ['DEFAULT'] = "zvok": "1", "glasba": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
config ['Uporabnik'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
z odprtimi ('nastavitve.conf ',' w ') kot configfile:
konfig.pisanje (configfile)

Prvi stavek v zgornji kodi uvozi modul ConfigParser. Drugi stavek ustvari slovarju podoben objekt, imenovan "config". Zdaj lahko s standardno sintakso slovarja Python definirate odseke in spremenljivke, ki so pod njimi, kot je razvidno iz naslednjih dveh stavkov. Nazadnje stavek »z odprtim« ustvari nove »nastavitve.conf ”in v datoteko zapiše konfiguracijske odseke.

Zgornja koda deluje, vendar je z njo majhen problem. Ob vsakem zagonu programa ustvari novo datoteko z nastavitvami, kar ima za posledico prepis vseh sprememb, ki so jih opravili uporabniki. Če želite odpraviti to težavo, morate preveriti dva pogoja:

Spodnja spremenjena koda bo preverila oba pogoja in ustvarila novo datoteko z nastavitvami le, če sta ta dva pogoja izpolnjena.

uvozi configparser
uvoz os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "zvok": "1", "glasba": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
config ['Uporabnik'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
datoteka_nastavitev = os.pot.dirname (os.pot.realna pot (__ datoteka__))
+ os.nastavitve sep + ".conf "
če ne os.pot.obstaja (datoteka_nastavitev)
ali os.stat (datoteka_nastavitev).st_size == 0:
z odprtimi ('nastavitve.conf ',' w ') kot configfile:
konfig.pisanje (configfile)

Drugi stavek v zgornji kodi uvozi modul “os”. Spremenljivka “settings_file” shrani celotno pot do “settings”.datoteko conf, ki jo je treba ustvariti v imeniku skripta Python. Naslednja izjava preverja dva zgoraj navedena pogoja. Prvi stavek v izjavi je samoumeven. Drugi stavek preveri, ali je velikost datoteke "0 bajtov". Ničelna datoteka bi pomenila prazno datoteko, v kateri niso shranjeni podatki. Preostala koda je enaka prvemu zgoraj navedenemu primeru.

Do sedaj opisani vzorci kod shranijo konfiguracijsko datoteko v imenik samega skripta Python. Vendar je običajna praksa in standard freedesktop shranjevanje konfiguracijskih datotek v.config ”v domači mapi. Spodnji vzorec kode bo ustvaril nove “nastavitve.conf “v“ ~ /.mapa config / testapp.

uvozi configparser
uvoz os
 
app_name = "testapp"
config_folder = os.pot.pridruži se (os.pot.expanduser ("~"), '.config ', ime_aplikacije)
os.makedirji (mapa_konfiguracije, obstajati_ok = True)
settings_file = "nastavitve.conf "
full_config_file_path = os.pot.pridruži se (mapa_konfiguracije, datoteka_nastavitev)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "zvok": "1", "glasba": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
config ['Uporabnik'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
 
če ne os.pot.obstaja (full_config_file_path)
ali os.stat (full_config_file_path).st_size == 0:
z odprtim (full_config_file_path, 'w') kot configfile:
konfig.pisanje (configfile)

Zgornja koda je skoraj enaka prejšnjemu primeru, le da spreminja lokacijo »nastavitev.conf “v“ ~ /.config / testapp / settings.conf ". Spremenljivka “config_folder” shrani celotno pot do mape aplikacije, ki jo želite ustvariti v “.config "(" ~ /.config / testapp / ”). "Os.makedirs "bo novo mapo z aplikacijami ustvaril le, če ta še ne obstaja. Spremenljivka “full_config_file_path” shrani celotno pot do nastavitvene datoteke (“~ /.config / testapp / settings.conf "). Preostala koda je samoumevna.

Branje datoteke Conf z uporabo programa ConfigParser

Razčlenjevanje konfiguracijske datoteke je precej enostavno. ConfigParser poskuša prebrati vrednost z uporabo metod get (), getfloat (), getboolean () ali sintakse slovarja. V primeru napake ključa se uporabijo vrednosti iz odseka DEFAULT ali nadomestne vrednosti. Dobra praksa je, da določite privzete vrednosti odseka ali nadomestne vrednosti, da preprečite ključne napake. Za zatiranje napak lahko uporabite tudi izjave poskusi razen.

config = configparser.ConfigParser ()
konfig.branje (full_config_file_path)
 
is_sound_on = config ['Uporabnik'].getboolean ('zvok')
volume_level = config ['Uporabnik'].getfloat ('glasnost')
resolucija = config ['Uporabnik'] ['ločljivost']
 
# Nadomestna vrednost "False" bo prezrta, saj že obstaja razdelek PRIROČNO.
# Če odseka DEFAULT ni, bo nadomestna vrednost pravilno uporabljena.
is_music_on = config ['Uporabnik'].getboolean ('glasba', napačno)
 
tisk (is_sound_on, is_music_on, volume_level, resolucija)

V zgornjem vzorcu kode je “config.stavek read ”se uporablja za branje podatkov iz konfiguracijske datoteke. V naslednjih izjavah se za branje podatkov uporabljajo različne vgrajene metode pridobivanja in zapisi slovarja. V izjavi spremenljivke “is_music_on” je drugi argument nadomestna vrednost (False). Upoštevajte, da bodo imele nadomestne vrednosti prednost pred vrednostmi, določenimi v razdelku DEFAULT. Preprosto povedano, nadomestne vrednosti ne bodo imele učinka, če je par ključ-vrednost že prisoten v razdelku PRIROČNO.

Celotna koda

Spodaj je celotna koda, ki združuje ustvarjanje konfiguracijske datoteke pri prvem zagonu in branje konfiguracijske datoteke.

#! / usr / bin / python3
uvozi configparser
uvoz os
 
app_name = "testapp"
config_folder = os.pot.pridruži se (os.pot.expanduser ("~"), '.config ', ime_aplikacije)
os.makedirji (mapa_konfiguracije, obstajati_ok = True)
settings_file = "nastavitve.conf "
full_config_file_path = os.pot.pridruži se (mapa_konfiguracije, datoteka_nastavitev)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "zvok": "1", "glasba": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
config ['Uporabnik'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolucija ":" 1920x1080 "
 
če ne os.pot.obstaja (full_config_file_path)
ali os.stat (full_config_file_path).st_size == 0:
z odprtim (full_config_file_path, 'w') kot configfile:
konfig.pisanje (configfile)
 
konfig.branje (full_config_file_path)
is_sound_on = config ['Uporabnik'].getboolean ('zvok')
volume_level = config ['Uporabnik'].getfloat ('glasnost')
resolucija = config ['Uporabnik'] ['ločljivost']
 
# Nadomestna vrednost "False" bo prezrta, saj že obstaja razdelek PRIROČNO.
# Če odseka DEFAULT ni, bo nadomestna vrednost pravilno uporabljena.
is_music_on = config ['Uporabnik'].getboolean ('glasba', napačno)
 
tisk (is_sound_on, is_music_on, volume_level, resolucija)

Zaključek

ConfigParser v Pythonu ponuja koristen način za upravljanje nastavitev tako ukazne vrstice kot aplikacij Python GUI. Te konfiguracijske datoteke se lahko uporabljajo tudi kot lahke besedilne zbirke podatkov, vendar morda niso primerne za napredne vrste podatkov, velike nabore podatkov in veliko število poizvedb.

Vadnica za OpenTTD
OpenTTD je ena izmed najbolj priljubljenih poslovnih simulacijskih iger. V tej igri morate ustvariti čudovit prevozniški posel. Vendar boste začeli na...
SuperTuxKart za Linux
SuperTuxKart je odličen naslov, zasnovan tako, da vam brezplačno ponuja izkušnjo Mario Kart v vašem sistemu Linux. Igrati je precej zahtevno in zabavn...
Vadnica za bitko za Wesnoth
Bitka za Wesnoth je ena izmed najbolj priljubljenih odprtokodnih strateških iger, ki jih lahko trenutno igrate. Ne samo, da se ta igra razvija že zelo...