Python

Hvordan lese og skrive INI- og Conf-filer ved hjelp av Python

Hvordan lese og skrive INI- og Conf-filer ved hjelp av Python
Python programmeringsspråk kommer med en nyttig innebygd modul kalt “ConfigParser” som kan brukes til å skrive konfigurasjonsparametere for apper rent. ConfigParser bruker et veldefinert og strukturert konfigurasjonsspråk som er fullt kompatibelt med INI-filer som finnes i Microsoft Windows. Disse INI-filene kan også brukes med Python-apper som kjører i Linux, og de gir en vedvarende måte å lagre og hente verdier på.

I Linux er det mer vanlig å se “.conf ”filer enn“.ini ”filer. Conf-filer i Linux er akkurat som alle andre tekstfiler, og derfor kan de struktureres på noen måte. Det er avhengig av parser hvordan det tolker en “.conf ”-fil. Pythons ConfigParser-modul kan analysere “.conf ”-filer også (eller annen tilfeldig utvidelse), forutsatt at disse filene er definert i INI-kompatibelt konfigurasjonsspråk. Denne artikkelen vil forklare lesing og skriving “.conf ”-filer i Linux ved hjelp av den siste stabile versjonen av Python 3. Merk at hvis du erstatter alle forekomster av “.conf ”utvidelse i denne artikkelen med“.ini ”utvidelse, ville resultatet være det samme. Prosessen og koden som er forklart nedenfor, bør også være forenlig med Microsoft Windows, med noen mindre forskjeller. Selv om disse forskjellene ikke vil bli dekket i denne artikkelen.

ConfigParser-modul

Konfigurasjonsfilsparser eller ConfigParser er en Python-modul som lar deg lese og skrive konfigurasjonsfiler som brukes i Python-apper. Som forklart ovenfor støtter denne modulen INI-filsyntaks. En veldig forenklet “.Inn jeg" / ".conf ”-filen ser slik ut.

[MISLIGHOLDE]
lyd = 1
musikk = 1
volum = 0.8
oppløsning = 1920x1080
[Bruker]
# lyd kan ha 0 (usann) og 1 (sant) som mulige verdier
lyd = 1
; musikk kan ha 0 (falske) og 1 (sanne) som mulige verdier
musikk = 0
Volum = 0.4
oppløsning = 1280x720

Eksempelet ".conf ”-filen ovenfor har to seksjoner,“ DEFAULT ”og“ User ”. Vanligvis er Python-programmer kodet på en slik måte at DEFAULT-seksjonsverdiene aldri endres. DEFAULT-delen brukes til å tilbakestille generelle eller individuelle verdier til standardverdier. Brukeravsnittet gjenspeiler endringer gjort av en sluttbruker som bruker Python-programmet. Merk at seksjonsnavnene kan være hva som helst, og det er ikke nødvendig å ha en STANDARD-seksjon i det hele tatt. Imidlertid når "DEFAULT" -delen er tilstede (navnet skal være med store bokstaver), vil det brukes til å trygt gi standardverdier hvis ConfigParser ikke analyserer visse variabler. Logikken for å håndtere disse seksjonene, variablene under dem og reserveverdiene må defineres i selve Python-programmet. Symboler som “#” og “;” kan brukes til å betegne kommentarer i “.conf ”filer. Alle nøkkelverdipar i konfigurasjonsfilen er ikke store og små bokstaver, vanligvis skrevet med små bokstaver.

Datatyper som håndteres av ConfigParser

Før du går videre med noen eksempler på ConfigParser, er det viktig å forstå datatypebehandlingen av denne modulen. For ConfigParser er hvert stykke skrevet eller analysert kode en streng. Det kan ikke skille mellom tall eller noe annet format. Programmører må skrive logikk i programmet sitt for å konvertere en streng "1234" til nummer ved å bruke int ("1234") mens de leser data fra en ".conf ”-fil.

Mens konvertering til tall ved hjelp av int og float-metoden er en ganske enkel oppgave, kan konvertering til boolsk være vanskelig da Python behandler bool ("any_string") for å være sant. For å løse dette problemet kan du bruke betingede utsagn som sjekker for en bestemt streng. ConfigParser-modulen gir også en metode som heter “getboolean ()”. Denne metoden kan skille mellom 'ja' / 'nei', 'på' / 'av', 'sann' / 'usann' og '1' / '0' boolske verdier riktig, selv om de er strenger. ConfigParser inkluderer også getint () og getfloat () metoder for din bekvemmelighet.

Skrive og lagre en ny Conf-fil ved hjelp av ConfigParser

La oss anta at “.conf ”-filen som er nevnt ovenfor, eksisterer ikke, og du vil opprette den automatisk ved første lansering av programmet. Koden nedenfor vil opprette nye “innstillinger.conf ”-fil i katalogen som Python-programmet har blitt kjørt fra.

importer configparser
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
med åpen ('innstillinger.conf ',' w ') som konfigurasjonsfil:
config.skriv (konfigurasjonsfil)

Den første setningen i koden ovenfor importerer ConfigParser-modulen. Den andre setningen oppretter et ordbokslignende objekt kalt “config”. Du kan nå bruke standard Python-ordbokssyntaks for å definere seksjoner og variabler som er inkludert under dem, som det fremgår av de neste to setningene. Til slutt oppretter "med åpen" uttalelse nye "innstillinger.conf ”-fil og skriver konfigurasjonsdeler til filen.

Koden ovenfor fungerer, men det er et lite problem med den. Den oppretter en ny innstillingsfil hver gang programmet kjøres, noe som resulterer i overskriving av brukerendringer i innstillingsfilen. For å løse dette problemet, må du sjekke to forhold:

Den modifiserte koden nedenfor vil kontrollere de to betingelsene og vil bare opprette en ny innstillingsfil hvis disse to betingelsene er oppfylt.

importer configparser
importer os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
settings_file = os.sti.dirname (os.sti.realpath (__ fil__))
+ os.sep + "innstillinger.conf "
hvis ikke os.sti.eksisterer (innstillingsfil)
eller os.stat (innstillingsfil).st_size == 0:
med åpen ('innstillinger.conf ',' w ') som konfigurasjonsfil:
config.skriv (konfigurasjonsfil)

Den andre setningen i koden ovenfor importerer “os” -modulen. Variabelen “settings_file” lagrer full sti til “settings.conf ”-fil som skal opprettes i katalogen til Python-skriptet. Neste uttalelse sjekker to forhold nevnt ovenfor. Den første paragrafen i uttalelsen er selvforklarende. Den andre paragrafen sjekker om filstørrelsen er "0 byte". En fil med null byte vil bety en tom fil uten data lagret i den. Resten av koden er den samme som det første eksemplet ovenfor.

Så langt lagrer kodeeksemplene som er beskrevet ovenfor konfigurasjonsfilen i katalogen til selve Python-skriptet. Imidlertid er det en vanlig praksis og freedesktop-standard å lagre konfigurasjonsfiler i ".config ”-katalog i hjemmemappen. Kodeprøven nedenfor vil opprette nye “innstillinger.conf ”-fil i“ ~ /.config / testapp ”-mappe.

importer configparser
importer os
 
app_name = "testapp"
config_folder = os.sti.bli med (os.sti.utvidelsesbruker ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "innstillinger.conf "
full_config_file_path = os.sti.bli med (config_folder, settings_file)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
 
hvis ikke os.sti.eksisterer (full_konfig_fil_sti)
eller os.stat (full_konfig_fil_sti).st_size == 0:
med åpen (full_konfig_fil_sti, 'w') som konfigurasjonsfil:
config.skriv (konfigurasjonsfil)

Koden ovenfor er nesten den samme som det tidligere eksemplet, bortsett fra at det endrer plasseringen av “innstillinger.conf ”fil til“ ~ /.config / testapp / innstillinger.conf ”. Variabelen “config_folder” lagrer hele banen til applikasjonsmappen som skal opprettes i “.config ”-katalog (“ ~ /.config / testapp / ”). “Os.makedirs ”-erklæringen vil bare opprette en ny appmappe hvis den ikke allerede eksisterer. “Full_config_file_path” -variabelen lagrer hele banen til innstillingsfilen (“~ /.config / testapp / innstillinger.conf ”). Resten av koden er selvforklarende.

Lese en Conf-fil ved hjelp av ConfigParser

Å analysere en konfigurasjonsfil er ganske grei. ConfigParser prøver å lese en verdi ved hjelp av get (), getfloat (), getboolean () -metoder eller ordbokssyntaks. I tilfelle en nøkkelfeil brukes verdier fra DEFAULT-delen eller reserveverdier. Det er god praksis å definere DEFAULT seksjons- eller reserveverdier for å forhindre nøkkelfeil. Du kan også bruke unntak av utsagn for å undertrykke feil.

config = configparser.ConfigParser ()
config.les (full_konfig_fil_sti)
 
is_sound_on = config ['User'].getboolean ('lyd')
volume_level = config ['User'].getfloat ('volum')
resolution = config ['User'] ['resolution']
 
# Tilbakestillingsverdi "False" vil bli ignorert siden det allerede er en STANDARD-seksjon.
# I mangel av DEFAULT-seksjonen, vil tilbakebetalingsverdien brukes behørig.
is_music_on = config ['Bruker'].getboolean ('musikk', falsk)
 
print (is_sound_on, is_music_on, volume_level, resolution)

I kodeeksemplet ovenfor, “config.read-setning brukes til å lese data fra en konfigurasjonsfil. I de følgende utsagnene brukes forskjellige innebygde get-metoder og ordboknotasjoner for å lese dataene. I "is_music_on" -variabeldeklarasjonen er det andre argumentet tilbakevendingsverdi (False). Vær oppmerksom på at reserveverdier har lavere forrang enn verdier som er definert i delen STANDARD. Enkelt sagt vil tilbakeslagsverdier ikke ha noen effekt når et nøkkelverdipar allerede er tilstede i DEFAULT-delen.

Full kode

Nedenfor er hele koden som kombinerer både første opprettelse av konfigurasjonsfilen og lesing av konfigurasjonsfilen.

#! / usr / bin / python3
importer configparser
importer os
 
app_name = "testapp"
config_folder = os.sti.bli med (os.sti.utvidelsesbruker ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "innstillinger.conf "
full_config_file_path = os.sti.bli med (config_folder, settings_file)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"volume": "0.8 "," resolution ":" 1920x1080 "
 
hvis ikke os.sti.eksisterer (full_konfig_fil_sti)
eller os.stat (full_konfig_fil_sti).st_size == 0:
med åpen (full_konfig_fil_sti, 'w') som konfigurasjonsfil:
config.skriv (konfigurasjonsfil)
 
config.les (full_konfig_fil_sti)
is_sound_on = config ['User'].getboolean ('lyd')
volume_level = config ['User'].getfloat ('volum')
resolution = config ['User'] ['resolution']
 
# Tilbakestillingsverdi "False" vil bli ignorert siden det allerede er en STANDARD-seksjon.
# I mangel av DEFAULT-seksjonen, vil tilbakebetalingsverdien brukes behørig.
is_music_on = config ['Bruker'].getboolean ('musikk', falsk)
 
skriv ut (is_sound_on, is_music_on, volume_level, resolution)

Konklusjon

ConfigParser i Python gir en nyttig måte å håndtere innstillinger for både kommandolinje og GUI Python-apper. Disse konfigurasjonsfilene kan også brukes som lette tekstbaserte databaser, men er kanskje ikke egnet for avanserte datatyper, store datasett og et stort antall spørsmål.

Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider er det tolvte tilskuddet til Tomb Raider-serien - et action-eventyrspill-franchise opprettet av Eidos Montreal. Spillet ble ...
Hvordan øke FPS i Linux?
FPS står for Bilder per sekund. FPSs oppgave er å måle bildefrekvensen i videoavspilling eller spillprestasjoner. Med enkle ord betegnes antall uavbru...
Topp Oculus App Lab-spill
Hvis du er Oculus-hodesettinnehaver, må du være klar over sideloading. Sidelading er prosessen med å installere ikke-butikkinnhold på hodesettet. Side...