„Python“

Kaip skaityti ir rašyti INI ir Conf failus naudojant „Python“

Kaip skaityti ir rašyti INI ir Conf failus naudojant „Python“
„Python“ programavimo kalba yra naudingas integruotas modulis „ConfigParser“, kurį galima naudoti švariai rašant programų konfigūracijos parametrus. „ConfigParser“ naudoja tiksliai apibrėžtą ir struktūrizuotą konfigūracijos kalbą, visiškai suderinamą su INI failais, esančiais „Microsoft Windows“. Šie INI failai taip pat gali būti naudojami su „Python“ programomis, veikiančiomis „Linux“, ir jie suteikia ilgalaikį būdą išsaugoti ir gauti vertes.

„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:

Ž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 / python3
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)
 
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ų.

Atvirojo kodo komercinių žaidimų variklių uostai
Nemokami atvirojo kodo ir įvairių platformų žaidimų varikliai gali būti naudojami žaidžiant senus ir kai kuriuos gana naujus žaidimų pavadinimus. Šiam...
Geriausi „Linux“ komandinės eilutės žaidimai
Komandų eilutė yra ne tik jūsų didžiausias sąjungininkas naudojant „Linux“, bet ir pramogų šaltinis, nes ją galite naudoti norėdami žaisti daug įdomių...
Geriausios „Linux“ skirtos „Gamepad“ žemėlapių sudarymo programos
Jei jums patinka žaisti žaidimus „Linux“ su žaidimų pultu, o ne įprasta klaviatūra ir pelės įvesties sistema, yra keletas jums naudingų programų. Daug...