Python

INI- ja Conf-tiedostojen lukeminen ja kirjoittaminen Pythonilla

INI- ja Conf-tiedostojen lukeminen ja kirjoittaminen Pythonilla
Python-ohjelmointikielessä on hyödyllinen sisäänrakennettu moduuli nimeltä ConfigParser, jota voidaan käyttää sovellusten kokoonpanoparametrien puhtaaseen kirjoittamiseen. ConfigParser käyttää tarkasti määriteltyä ja jäsenneltyä määrityskieliä, joka on täysin yhteensopiva Microsoft Windowsista löydettyjen INI-tiedostojen kanssa. Näitä INI-tiedostoja voidaan käyttää myös Linuxissa toimivien Python-sovellusten kanssa, ja ne tarjoavat jatkuvan tavan tallentaa ja hakea arvoja.

Linuxissa on yleisempää nähdä.conf ”tiedostot kuin“.ini ”-tiedostot. Conf-tiedostot Linuxissa ovat aivan kuten muutkin tekstitiedostot, ja siksi ne voidaan jäsentää millä tahansa tavalla. Se on jäsentimestä riippuvainen siitä, miten se tulkitsee.conf ”tiedosto. Pythonin ConfigParser-moduuli voi jäsentää “.conf ”-tiedostot (tai mikä tahansa muu satunnainen laajennus), jos nämä tiedostot on määritelty INI-yhteensopivalla määrityskielellä. Tässä artikkelissa selitetään lukeminen ja kirjoittaminen.conf ”-tiedostot Linuxissa käyttäen uusinta vakaa Python 3 -versiota. Huomaa, että jos korvataan kaikki.conf "laajennus tässä artikkelissa sanalla".ini ”-laajennus, tulos olisi sama. Alla selitetyn prosessin ja koodin tulisi olla enimmäkseen yhteensopivia myös Microsoft Windowsin kanssa muutamilla pienillä eroilla. Vaikka näitä eroja ei käsitellä tässä artikkelissa.

ConfigParser-moduuli

Määritystiedostojen jäsennin tai ConfigParser on Python-moduuli, jonka avulla voit lukea ja kirjoittaa Python-sovelluksissa käytettyjä määritystiedostoja. Kuten yllä selitettiin, tämä moduuli tukee INI-tiedostojen syntaksia. Erittäin yksinkertainen.ini ”/“.conf ”tiedosto näyttää tältä.

[OLETUS]
ääni = 1
musiikki = 1
tilavuus = 0.8
resoluutio = 1920x1080
[Käyttäjä]
# äänellä voi olla 0 (väärä) ja 1 (tosi) mahdollisina arvoina
ääni = 1
; musiikilla voi olla 0 (väärä) ja 1 (tosi) mahdollisena arvona
musiikki = 0
Tilavuus = 0.4
resoluutio = 1280x720

Esimerkki ".conf-tiedostossa on kaksi osiota, "DEFAULT" ja "User". Tavallisesti Python-ohjelmat koodataan siten, että OLETUS-osion arvoja ei koskaan muuteta. OLETUS-osiota käytetään palauttamaan kokonais- tai yksittäiset arvot oletusarvoihin. Käyttäjäosa heijastaa muutoksia, jotka Python-ohjelmaa käyttävä loppukäyttäjä on tehnyt. Huomaa, että osioiden nimet voivat olla mitä tahansa, eikä oletusarvoista osiota tarvitse olla lainkaan. Kuitenkin aina, kun osio "OLETUS" on läsnä (nimen tulee olla isoja kirjaimia), sitä käytetään oletusarvojen turvalliseen antamiseen, jos ConfigParser ei jäsennä tiettyjä muuttujia. Logiikka näiden osioiden, niiden alla olevien muuttujien ja vara-arvojen käsittelemiseksi on määriteltävä itse Python-ohjelmassa. Symbolit, kuten "#" ja ";" voidaan käyttää merkitsemään kommentteja.conf ”-tiedostot. Kaikki konfiguraatiotiedoston avainarvoparit eivät erota kirjainkokoja, yleensä ne kirjoitetaan pienillä kirjaimilla.

Tietotyyppien käsittely ConfigParserilla

Ennen kuin jatkat muutamien ConfigParser-esimerkkien kanssa, on tärkeää ymmärtää tietotyyppien käsittely tällä moduulilla. ConfigParserilla jokainen kirjoitettu tai jäsennetty koodi on merkkijono. Se ei voi tehdä eroa numeroiden tai muun muodon välillä. Ohjelmoijien on kirjoitettava ohjelmansa logiikka muunnettaessa merkkijono "1234" numeroksi käyttämällä int ("1234") lukiessaan tietoja ".conf ”tiedosto.

Vaikka muuntaminen numeroiksi int- ja float-menetelmällä on melko helppo tehtävä, muuntaminen loogiseksi voi olla hankalaa, koska Python kohtelee boolia (“any_string”) totta. Voit ratkaista tämän ongelman käyttämällä ehdollisia lauseita tietyn merkkijonon tarkistamiseen. ConfigParser-moduuli tarjoaa myös menetelmän nimeltä "getboolean ()". Tällä menetelmällä voidaan erottaa oikein kyllä ​​/ ei, päällä / pois, tosi / väärä ja loogiset arvot 1, vaikka ne ovat merkkijonoja. ConfigParser sisältää myös getint () - ja getfloat () -menetelmät avuksesi.

Uuden Conf-tiedoston kirjoittaminen ja tallentaminen ConfigParser-sovelluksella

Oletetaan, että.yllä mainittua conf-tiedostoa ei ole olemassa ja haluat luoda sen automaattisesti ohjelman ensimmäisen käynnistyksen yhteydessä. Alla oleva koodi luo uudet asetukset.conf ”tiedosto hakemistossa, josta Python-ohjelma on suoritettu.

tuo kokoonpano vähemmän
config = configparser.ConfigParser ()
config ['DEFAULT'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
config ['User'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
avaamalla ('asetukset.conf ',' w ') asetustiedostona:
konfig.kirjoita (configfile)

Yllä olevan koodin ensimmäinen käsky tuo ConfigParser-moduulin. Toinen lause luo sanakirjan kaltaisen objektin nimeltä “config”. Voit nyt käyttää tavallista Python-sanakirjan syntaksia määritelläksesi niihin sisältyvät osiot ja muuttujat, kuten käy ilmi kahdesta seuraavasta lauseesta. Lopuksi "auki" -lauseke luo uudet "asetukset".conf ”-tiedosto ja kirjoittaa config-osiot tiedostoon.

Yllä oleva koodi toimii, mutta siinä on pieni ongelma. Se luo uuden asetustiedoston joka kerta, kun ohjelmaa suoritetaan, minkä seurauksena kaikki käyttäjän tekemät muokkaukset asetustiedostoon korvataan. Voit korjata tämän ongelman tarkistamalla kaksi ehtoa:

Alla oleva muokattu koodi tarkistaa nämä kaksi ehtoa ja luo uuden asetustiedoston vain, jos nämä kaksi ehtoa täyttyvät.

tuo kokoonpano vähemmän
tuonti os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
config ['User'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
settings_file = os.polku.dirname (os.polku.todellinen polku (__ tiedosto__))
+ os.sep + "asetukset.conf "
ellei os.polku.olemassa (asetustiedosto)
tai os.stat (asetukset_tiedosto).st_size == 0:
avaamalla ('asetukset.conf ',' w ') asetustiedostona:
konfig.kirjoita (configfile)

Yllä olevan koodin toinen käsky tuo os-moduulin. Muuttuja ”settings_file” tallentaa täyden polun asetuksiin.conf ”-tiedosto, joka luodaan Python-komentosarjan hakemistoon. Seuraava lausunto tarkistaa kaksi edellä mainittua ehtoa. Lausunnon ensimmäinen lause on itsestään selvä. Toinen lauseke tarkistaa, onko tiedostokoko "0 tavua". Nollatavun tiedosto merkitsisi tyhjää tiedostoa, johon ei olisi tallennettu tietoja. Koodin loppuosa on sama kuin edellä mainittu ensimmäinen esimerkki.

Toistaiseksi yllä selitetyt koodinäytteet tallentavat määritystiedoston itse Python-komentosarjan hakemistoon. Määritystiedostojen tallentaminen ".config ”-hakemisto kotikansiossa. Alla oleva koodinäyte luo uudet asetukset.conf ”-tiedosto tiedostossa“ ~ /.config / testapp ”-kansio.

tuo kokoonpano vähemmän
tuonti os
 
app_name = "testapp"
config_folder = os.polku.liittyä (os.polku.laajentaja ("~"), '.config ', sovelluksen_nimi)
os.makedirs (config_folder, exist_ok = True)
settings_file = "asetukset.conf "
full_config_file_path = os.polku.liity (config_folder, settings_file)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
config ['User'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
 
ellei os.polku.olemassa (full_config_file_path)
tai os.stat (full_config_file_path).st_size == 0:
jossa open (full_config_file_path, 'w') on configfile:
konfig.kirjoita (configfile)

Yllä oleva koodi on lähes sama kuin edellinen esimerkki, paitsi että se muuttaa “asetusten sijaintia.conf ”tiedosto tiedostoon“ ~ /.config / testapp / settings.conf ”. Muuttuja “config_folder” tallentaa koko polun luomaan sovelluskansioon.config ”-hakemisto (“ ~ /.config / testapp / ”). "OS.makedirs ”-lauseke luo uuden sovelluskansion vain, jos sitä ei vielä ole olemassa. Muuttuja “full_config_file_path” tallentaa koko asetustiedoston polun (“~ /.config / testapp / settings.conf ”). Loput koodista ovat itsestään selviä.

Conf-tiedoston lukeminen ConfigParserilla

Konfigurointitiedoston jäsentäminen on melko suoraviivaista. ConfigParser yrittää lukea arvon käyttämällä get (), getfloat (), getboolean () -menetelmiä tai sanakirjan syntaksia. Jos kyseessä on avainvirhe, käytetään arvoja OLETUS-osiosta tai vara-arvoja. On hyvä käytäntö määritellä OLETUSOSA tai vara-arvot avainvirheiden estämiseksi. Voit käyttää try-paitsi-lauseita myös virheiden tukahduttamiseen.

config = configparser.ConfigParser ()
konfig.lue (koko_määritystiedoston_polku)
 
is_sound_on = config ['Käyttäjä'].getboolean ('ääni')
äänenvoimakkuuden taso = config ['Käyttäjä'].getfloat ('määrä')
resoluutio = config ['käyttäjä'] ['resoluutio']
 
# Vara-arvo "False" ohitetaan, koska siellä on jo OLETUSOSA.
# Jos OLETUS-osiota ei ole, vara-arvoa käytetään asianmukaisesti.
is_music_on = config ['Käyttäjä]].getboolean ('musiikki', väärä)
 
tulosta (is_sound_on, is_music_on, volume_level, resolution)

Yllä olevassa koodinäytteessä "config.Lue ”-lauseketta käytetään tietojen lukemiseen asetustiedostosta. Seuraavissa lauseissa datan lukemiseen käytetään erilaisia ​​sisäänrakennettuja get-menetelmiä ja sanakirjamerkintöjä. "Is_music_on" -muuttuja-ilmoituksessa toinen argumentti on vara-arvo (False). Huomaa, että palautusarvoilla on alempi etusija kuin oletusarvoissa määritetyillä arvoilla. Yksinkertaisesti sanottuna varmuusarvoilla ei ole vaikutusta, kun avain-arvo-pari on jo OLETUS-osiossa.

Koko koodi

Alla on koko koodi, joka yhdistää sekä konfigurointitiedoston ensimmäisen ajon luomisen että määritystiedoston lukemisen.

#! / usr / bin / python3
tuo kokoonpano vähemmän
tuonti os
 
app_name = "testapp"
config_folder = os.polku.liittyä (os.polku.laajentaja ("~"), '.config ', sovelluksen_nimi)
os.makedirs (config_folder, exist_ok = True)
settings_file = "asetukset.conf "
full_config_file_path = os.polku.liity (config_folder, settings_file)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
config ['User'] = "ääni": "1", "musiikki": "1",
"äänenvoimakkuus": "0.8 "," resoluutio ":" 1920x1080 "
 
ellei os.polku.olemassa (full_config_file_path)
tai os.stat (full_config_file_path).st_size == 0:
jossa open (full_config_file_path, 'w') on configfile:
konfig.kirjoita (configfile)
 
konfig.lue (koko_määritystiedoston_polku)
is_sound_on = config ['Käyttäjä'].getboolean ('ääni')
äänenvoimakkuuden taso = config ['Käyttäjä'].getfloat ('määrä')
resoluutio = config ['käyttäjä'] ['resoluutio']
 
# Vara-arvo "False" ohitetaan, koska siellä on jo OLETUSOSA.
# Jos OLETUS-osiota ei ole, vara-arvoa käytetään asianmukaisesti.
is_music_on = config ['Käyttäjä]].getboolean ('musiikki', väärä)
 
tulosta (is_sound_on, is_music_on, volume_level, resolution)

Johtopäätös

ConfigParser Pythonissa tarjoaa hyödyllisen tavan käsitellä sekä komentorivi- että GUI Python -sovellusten asetuksia. Näitä määritystiedostoja voidaan käyttää myös kevyinä tekstipohjaisina tietokantoina, mutta ne eivät välttämättä sovi edistyneille tietotyypeille, suurille tietojoukoille ja suurelle määrälle kyselyitä.

How to Develop a Game on Linux
A decade ago, not many Linux users would predict that their favorite operating system would one day be a popular gaming platform for commercial video ...
Open Source Ports of Commercial Game Engines
Free, open source and cross-platform game engine recreations can be used to play old as well as some of the fairly recent game titles. This article wi...
Parhaat komentorivipelit Linuxille
Komentorivi ei ole vain suurin liittolainen Linuxia käytettäessä - se voi olla myös viihteen lähde, koska voit käyttää sitä pelaamaan monia hauskoja p...