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änconfig = 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:
- Onko asetustiedosto olemassa? Jos ei, luo uusi asetustiedosto vain, jos tiedostoa ei ole.
- Asetustiedosto on olemassa, mutta sisältääkö se tietoja? Onko se tyhjä? Kirjoita uudet määritystiedot asetustiedostoon vain, jos se on tyhjä.
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äntuonti 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äntuonti 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 / python3tuo 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ä.