„Linux“ sistemoje dažniau matyti „.conf “failai nei„.ini “bylos. „Conf“ failai sistemoje „Linux“ yra kaip ir bet kurie kiti tekstiniai failai, todėl juos galima struktūrizuoti bet kokiu būdu. Nuo analizatoriaus priklauso, kaip jis interpretuoja „.conf “byla. „Python“ „ConfigParser“ modulis gali išanalizuoti „.conf “failai (arba bet kuris kitas atsitiktinis plėtinys), jei šie failai yra apibrėžti INI suderinama konfigūracijos kalba. Šis straipsnis paaiškins skaitymą ir rašymą “.conf “failai sistemoje„ Linux “naudojant naujausią stabilią„ Python 3 “versiją. Atminkite, kad jei pakeisite visus „.conf “pratęsimas šiame straipsnyje su„.ini “pratęsimas, rezultatas būtų tas pats. Žemiau paaiškintas procesas ir kodas taip pat turėtų būti suderinami su „Microsoft Windows“, su keliais nedideliais skirtumais. Nors šie skirtumai nebus aptarti šiame straipsnyje.
„ConfigParser“ modulis
Konfigūracijos failų analizatorius arba „ConfigParser“ yra „Python“ modulis, leidžiantis skaityti ir rašyti „Python“ programose naudojamus konfigūracijos failus. Kaip paaiškinta aukščiau, šis modulis palaiko INI failų sintaksę. Labai paprastas “.ini “/„.conf “byla atrodo taip.
[NUMATYTAS]garsas = 1
muzika = 1
tūris = 0.8
skiriamoji geba = 1920x1080
[Vartotojas]
# garso reikšmės gali būti 0 (klaidinga) ir 1 (teisinga)
garsas = 1
; muzika gali turėti 0 (klaidinga) ir 1 (teisinga) reikšmes
muzika = 0
Tomas = 0.4
skiriamoji geba = 1280x720
Pavyzdys „.conf “faile yra du skyriai:„ DEFAULT “ir„ User “. Paprastai „Python“ programos yra koduojamos taip, kad NUOLATINĖS skilties vertės niekada nebūtų keičiamos. Skyrius Numatytasis naudojamas norint atkurti bendras arba atskiras reikšmes į numatytąsias. Vartotojo skiltis atspindi pakeitimus, kuriuos atliko galutinis vartotojas, kuris naudojasi „Python“ programa. Atkreipkite dėmesį, kad skyrių pavadinimai gali būti bet kokie ir visai nebūtina turėti skiltį DEFAULT. Tačiau kai yra skyrius „Numatytasis“ (vardas turėtų būti nurodytas didžiosiomis raidėmis), jis bus naudojamas saugiai pateikti numatytąsias reikšmes, jei „ConfigParser“ nepavyks išanalizuoti tam tikrų kintamųjų. Logika, skirta tvarkyti šiuos skyrius, po jais esančius kintamuosius ir atsargines vertes, turi būti apibrėžta pačioje „Python“ programoje. Tokie simboliai kaip „#“ ir „;“ gali būti naudojamas žymėti komentarus.conf “bylos. Visos raktų reikšmės poros konfigūracijos faile neskiriamos didžiosiomis ir mažosiomis raidėmis.
Duomenų tipų tvarkymas „ConfigParser“
Prieš pradedant keletą „ConfigParser“ pavyzdžių, svarbu suprasti šio tipo duomenų tipų valdymą. „ConfigParser“ kiekvienas užrašytas arba išanalizuotas kodas yra eilutė. Jis negali atskirti skaičių ar bet kokio kito formato. Programuotojai turi parašyti logiką savo programoje, kad pakeisdami eilutę „1234“ į skaičių naudodami int („1234“), skaitydami duomenis iš „.conf “byla.
Nors perskaičiavimas į skaičius naudojant „int“ ir „float“ metodą yra gana lengva užduotis, perskaičiavimas į loginę gali būti keblus, nes „Python“ traktuoja „Bool“ („any_string“) tiesą. Norėdami išspręsti šią problemą, galite naudoti sąlyginius sakinius tikrindami konkrečią eilutę. „ConfigParser“ modulis taip pat pateikia metodą, vadinamą „getboolean ()“. Šis metodas gali teisingai atskirti „taip“ / „ne“, „įjungta“ / „išjungta“, „teisinga“ / „klaidinga“ ir „1“ / „0“ loginės reikšmės, net jei jos yra eilutės. Jūsų patogumui „ConfigParser“ taip pat apima „getint“ () ir „getfloat“ () metodus.
Naujo „Conf“ failo rašymas ir išsaugojimas naudojant „ConfigParser“
Tarkime, kad.aukščiau paminėto failo „conf“ nėra ir norite jį sukurti automatiškai paleidus programą. Žemiau pateiktas kodas sukurs naujus nustatymus.conf “failas kataloge, iš kurio paleista„ Python “programa.
importuoti konfigūracijąconfig = configparser.„ConfigParser“ ()
config ['DEFAULT'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
config ['User'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
su atidarytu ('nustatymai.conf “,„ w “) kaip configfile:
konfigūruoti.rašyti (configfile)
Pirmasis aukščiau esančio kodo sakinys importuoja „ConfigParser“ modulį. Antrasis teiginys sukuria į žodyną panašų objektą, vadinamą „config“. Dabar galite naudoti standartinę „Python“ žodyno sintaksę, kad apibrėžtumėte į juos įtrauktus skyrius ir kintamuosius, kaip matyti iš kitų dviejų sakinių. Galiausiai teiginys „su atviru“ sukuria naujus nustatymus.conf “failas ir įrašo konfigūracijos skyrius į failą.
Aukščiau pateiktas kodas veikia, tačiau jame yra nedidelė problema. Kiekvieną kartą paleidus programą, jis sukuria naują nustatymų failą, todėl bet kuris vartotojas redaguoja nustatymų failą. Norėdami išspręsti šią problemą, turite patikrinti dvi sąlygas:
- Ar egzistuoja nustatymų failas? Jei ne, sukurkite naują nustatymų failą tik tuo atveju, jei failo nėra.
- Nustatymų failas egzistuoja, bet ar jame yra duomenų? Ar tuščia? Rašykite naujus konfigūracijos duomenis į nustatymų failą tik tuo atveju, jei jis tuščias.
Žemiau pateiktas modifikuotas kodas patikrins dvi sąlygas ir sukurs naują nustatymų failą tik tada, jei tenkinamos šios dvi sąlygos.
importuoti konfigūracijąimportuoti os
config = configparser.„ConfigParser“ ()
config ['DEFAULT'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
config ['User'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
settings_file = os.kelias.dirname (os.kelias.realpath (__ file__))
+ os.sep + "nustatymai.konf. "
jei ne os.kelias.egzistuoja (parametrų failas)
arba os.stat (nustatymų_failas).st_size == 0:
su open ('nustatymai.conf “,„ w “) kaip configfile:
konfigūruoti.rašyti (configfile)
Antrasis aukščiau nurodyto kodo sakinys importuoja „os“ modulį. Kintamasis „settings_file“ išsaugo visą kelią į „settings“.conf “failas, kuris bus sukurtas„ Python “scenarijaus kataloge. Kitame pareiškime patikrinamos dvi pirmiau minėtos sąlygos. Pirmasis teiginys yra savaime suprantamas. Antrasis punktas tikrina, ar failo dydis yra „0 baitų“. Nulinio baito failas reikštų tuščią failą, kuriame nebūtų jokių duomenų. Likusi kodo dalis yra tokia pati kaip pirmojo aukščiau nurodyto pavyzdžio.
Iki šiol aukščiau paaiškinti kodų pavyzdžiai išsaugo konfigūracijos failą paties „Python“ scenarijaus kataloge. Tačiau yra įprasta praktika ir „freedesktop“ standartas išsaugoti konfigūracijos failus „.config “katalogą namų aplanke. Žemiau pateiktas kodo pavyzdys sukurs naujus nustatymus.conf “failas„ ~ /.config / testapp “aplanką.
importuoti konfigūracijąimportuoti os
app_name = "testapp"
config_folder = os.kelias.prisijungti (os.kelias.plėtiklis ("~"), ".konfigūruoti, programos_pavadinimas)
os.makedirai (config_folder, egzistuoja_ok = True)
settings_file = "parametrai.konf. "
full_config_file_path = os.kelias.prisijungti (config_folder, settings_file)
config = configparser.„ConfigParser“ ()
config ['DEFAULT'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
config ['User'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
jei ne os.kelias.egzistuoja (full_config_file_path)
arba os.stat (pilnas_konfig_failo_kelas).st_size == 0:
konfigūracijos failą atidarius (full_config_file_path, 'w'):
konfigūruoti.rašyti (configfile)
Aukščiau pateiktas kodas yra beveik toks pat kaip ankstesnio pavyzdžio, išskyrus tai, kad jis keičia „nustatymų“ vietą.conf “failą į„ ~ /.config / testapp / settings.konf “. Kintamasis „config_folder“ išsaugo visą kelią į programos aplanką, kurį reikia sukurti „.config “katalogas („ ~ /.config / testapp / “). „Os.makedirs “teiginys sukurs naują programos aplanką tik tuo atveju, jei jo dar nėra. Kintamasis „full_config_file_path“ išsaugo visą nustatymų failo kelią („~ /.config / testapp / settings.konf “). Likęs kodas nėra aiškus.
„Conf“ failo skaitymas naudojant „ConfigParser“
Analizuoti konfigūracijos failą yra gana paprasta. „ConfigParser“ bando nuskaityti vertę naudodamas get (), getfloat (), getboolean () metodus arba žodyno sintaksę. Esant pagrindinei klaidai, naudojamos reikšmės iš Numatytojo skyriaus arba atsarginės vertės. Gera praktika apibrėžti Numatytąją sekcijos arba atsargines reikšmes, kad būtų išvengta pagrindinių klaidų. Klaidoms užblokuoti taip pat galite naudoti teiginius „try-išskyrus“.
config = configparser.„ConfigParser“ ()konfigūruoti.skaityti (full_config_file_path)
is_sound_on = config ['Vartotojas'].getboolean („garsas“)
volume_level = config ['Vartotojas'].getfloat („tūris“)
rezoliucija = config ['Vartotojas'] ['rezoliucija']
# Atsarginė vertė „False“ bus ignoruojama, nes jau yra skyrius Numatytasis.
# Jei nėra skirsnio Numatyta, atsarginė vertė bus tinkamai naudojama.
is_music_on = config ['Vartotojas'].getboolean („muzika“, klaidinga)
spausdinti (is_sound_on, is_music_on, volume_level, resolution)
Aukščiau pateiktame kodo pavyzdyje „config.skaityti “sakinys naudojamas duomenims iš konfigūracijos failo nuskaityti. Tolesniuose teiginiuose duomenims skaityti naudojami įvairūs įmontuoti „get“ metodai ir žodynų užrašai. Kintamojo deklaracijoje „is_music_on“ antrasis argumentas yra atsarginė vertė (False). Atminkite, kad atsarginės vertės bus mažesnės nei tos, kurios apibrėžtos skyriuje Numatytasis. Paprasčiau tariant, atsarginės vertės neturės jokio poveikio, kai raktų ir verčių pora jau yra skyriuje Numatyta.
Visas kodas
Žemiau yra visas kodas, apjungiantis konfigūros failo sukūrimą pirmą kartą ir konfigūracijos failo skaitymą.
#! / usr / bin / python3importuoti konfigūraciją
importuoti os
app_name = "testapp"
config_folder = os.kelias.prisijungti (os.kelias.plėtiklis ("~"), ".konfigūruoti, programos_pavadinimas)
os.makedirai (config_folder, egzistuoja_ok = True)
settings_file = "parametrai.konf. "
full_config_file_path = os.kelias.prisijungti (config_folder, settings_file)
config = configparser.„ConfigParser“ ()
config ['DEFAULT'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
config ['User'] = "garsas": "1", "muzika": "1",
„tūris“: „0.8 "," rezoliucija ":" 1920x1080 "
jei ne os.kelias.egzistuoja (full_config_file_path)
arba os.stat (pilnas_konfig_failo_kelas).st_size == 0:
konfigūracijos failą atidarius (full_config_file_path, 'w'):
konfigūruoti.rašyti (configfile)
konfigūruoti.skaityti (full_config_file_path)
is_sound_on = config ['Vartotojas'].getboolean („garsas“)
volume_level = config ['Vartotojas'].getfloat ('tūris')
rezoliucija = config ['vartotojas'] ['skiriamoji geba']
# Atsarginė vertė „False“ bus ignoruojama, nes jau yra skyrius Numatytasis.
# Jei nėra skirsnio Numatyta, atsarginė vertė bus tinkamai naudojama.
is_music_on = config ['Vartotojas'].getboolean („muzika“, klaidinga)
spausdinti (is_sound_on, is_music_on, volume_level, resolution)
Išvada
„ConfigParser“ programoje „Python“ yra naudingas būdas valdyti komandinės eilutės ir „GUI Python“ programų nustatymus. Šie konfigūracijos failai taip pat gali būti naudojami kaip lengvos teksto bazės, tačiau gali netikti patobulintiems duomenų tipams, dideliems duomenų rinkiniams ir daugybei užklausų.