Pytonorm

Hur man läser och skriver INI- och Conf-filer med Python

Hur man läser och skriver INI- och Conf-filer med Python
Python-programmeringsspråk kommer med en användbar inbyggd modul som heter "ConfigParser" som kan användas för att enkelt skriva konfigurationsparametrar för appar. ConfigParser använder ett väldefinierat och strukturerat konfigurationsspråk som är helt kompatibelt med INI-filer som finns i Microsoft Windows. Dessa INI-filer kan också användas med Python-appar som körs i Linux och de ger ett bestående sätt att lagra och hämta värden.

I Linux är det vanligare att se “.conf ”filer än“.ini ”-filer. Conf-filer i Linux är precis som alla andra textfiler och därför kan de struktureras på något sätt. Det är beroende av tolkning hur det tolkar en ”.conf ”-fil. Pythons ConfigParser-modul kan analysera “.conf ”-filer (eller något annat slumpmässigt tillägg), förutsatt att dessa filer är definierade i INI-kompatibelt konfigurationsspråk. Denna artikel kommer att förklara läsning och skrivning “.conf ”-filer i Linux med den senaste stabila versionen av Python 3. Observera att om du ersätter alla förekomster av “.conf ”förlängning i den här artikeln med“.ini ”förlängning skulle resultatet vara detsamma. Processen och koden som förklaras nedan bör också vara mest kompatibel med Microsoft Windows, med några mindre skillnader. Även om dessa skillnader inte kommer att behandlas i den här artikeln.

ConfigParser-modul

Konfigurationsfil parser eller ConfigParser är en Python-modul som låter dig läsa och skriva konfigurationsfiler som används i Python-appar. Som förklarats ovan stöder den här modulen INI-filsyntax. En mycket förenklad “.ini ”/“.conf ”-filen ser ut så här.

[STANDARD]
ljud = 1
musik = 1
volym = 0.8
upplösning = 1920x1080
[Användare]
# ljud kan ha 0 (falskt) och 1 (sant) som möjliga värden
ljud = 1
; musik kan ha 0 (falskt) och 1 (sant) som möjliga värden
musik = 0
Volym = 0.4
upplösning = 1280x720

Exemplet ".conf ”-filen ovan har två sektioner,“ DEFAULT ”och“ User ”. Vanligtvis kodas Python-program på ett sådant sätt att DEFAULT-sektionsvärdena aldrig ändras. Avsnittet STANDARD används för att återställa övergripande eller enskilda värden till standardvärden. Användarsektionen återspeglar ändringar som gjorts av en slutanvändare som använder Python-programmet. Observera att sektionsnamnen kan vara vad som helst och det är inte nödvändigt att ha en STANDARD-sektion alls. Närhelst avsnittet "STANDARD" är närvarande (namnet ska vara i versaler) kommer det att användas för att säkert tillhandahålla standardvärden om ConfigParser misslyckas med att analysera vissa variabler. Logiken för att hantera dessa avsnitt, variabler under dem och reservvärden måste definieras i själva Python-programmet. Symboler som "#" och ";" kan användas för att beteckna kommentarer i “.conf ”-filer. Alla nyckel-värdepar i konfigurationsfilen är skiftlägeskänsliga, vanligtvis skrivna med gemener.

Datatyper som hanteras av ConfigParser

Innan du går vidare med några exempel på ConfigParser är det viktigt att förstå datatypshantering av denna modul. För ConfigParser är varje skriven eller analyserad kod en sträng. Det kan inte skilja mellan siffror eller något annat format. Programmerare måste skriva logik i sitt program för att konvertera en sträng “1234” till nummer genom att använda int (“1234”) medan de läser data från en “.conf ”-fil.

Det är ganska enkelt att konvertera till siffror med int och float-metoden, men att konvertera till boolean kan vara svårt eftersom Python behandlar bool ("any_string") för att vara sant. För att lösa problemet kan du använda villkorliga uttalanden för att kontrollera en specifik sträng. Modulen ConfigParser tillhandahåller också en metod som kallas "getboolean ()". Den här metoden kan korrekt skilja på 'ja' / 'nej', 'på' / 'av', 'sant' / 'falskt' och '1' / '0' booleskt värde även om de är strängar. ConfigParser innehåller också getint () och getfloat () metoder för din bekvämlighet.

Skriva och spara en ny Conf-fil med ConfigParser

Låt oss anta att “.conf ”-filen som nämns ovan finns inte och du vill skapa den automatiskt vid den första starten av programmet. Koden nedan skapar en ny “inställning.conf ”-fil i katalogen från vilken Python-programmet har körts.

importera 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 öppna ('inställningar.conf ',' w ') som konfigurationsfil:
konfigurera.skriv (configfile)

Det första uttalandet i koden ovan importerar ConfigParser-modulen. Det andra uttalandet skapar ett ordboksliknande objekt som heter "config". Du kan nu använda Python-ordlistasyntax för att definiera avsnitt och variabler som ingår i dem, vilket framgår av de två följande påståendena. Slutligen skapar "med öppen" uttalande en ny "inställning.conf ”-fil och skriver konfigurationsavsnitt till filen.

Koden ovan fungerar, men det är ett litet problem med det. Det skapar en ny inställningsfil varje gång programmet körs, vilket resulterar i överskrivning av eventuella ändringar som görs av inställningsfilen. För att åtgärda problemet måste du kontrollera två villkor:

Den modifierade koden nedan kontrollerar de två villkoren och skapar bara en ny inställningsfil om dessa två villkor är uppfyllda.

importera configparser
importera 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 "
inställningsfil = os.väg.dirname (os.väg.realpath (__ fil__))
+ os.inställningar för sep + ".conf "
om inte os.väg.existerar (inställningsfil)
eller os.stat (inställningsfil).st_size == 0:
med öppen ('inställningar.conf ',' w ') som konfigurationsfil:
konfigurera.skriv (configfile)

Det andra uttalandet i koden ovan importerar “os” -modulen. Variabeln "settings_file" lagrar hela sökvägen till "inställningarna.conf ”-fil som ska skapas i katalogen för Python-skriptet. Nästa uttalande kontrollerar två ovannämnda villkor. Den första klausulen i uttalandet är självförklarande. Den andra klausulen kontrollerar om filstorleken är “0 byte”. En fil med nollbyte skulle innebära en tom fil utan data lagrad i den. Resten av koden är densamma som det första exemplet som anges ovan.

Hittills sparar kodproverna som beskrivs ovan konfigurationsfilen i katalogen för själva Python-skriptet. Det är dock en vanlig praxis och fri skrivbordsstandard att spara konfigurationsfiler i.config ”-katalog i hemmappen. Kodprovet nedan skapar en ny “inställning.conf ”-fil i“ ~ /.config / testapp ”-mapp.

importera configparser
importera os
 
app_name = "testapp"
config_folder = os.väg.gå med (os.väg.expanduser ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "inställningar.conf "
full_config_file_path = os.väg.gå 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 "
 
om inte os.väg.finns (full_config_file_path)
eller os.stat (full_config_file_path).st_size == 0:
med öppen (full_config_file_path, 'w') som konfigurationsfil:
konfigurera.skriv (configfile)

Koden ovan är nästan densamma som i det tidigare exemplet, förutom att den ändrar platsen för “inställningar.conf ”-fil till“ ~ /.config / testapp / inställningar.conf ”. Variabeln "config_folder" lagrar hela sökvägen till applikationsmappen som ska skapas i ".config ”-katalog (“ ~ /.config / testapp / ”). Den "os.makedirs ”uttalande skapar bara en ny appmapp om den inte redan finns. Variabeln "full_config_file_path" lagrar hela sökvägen för inställningsfilen ("~ /.config / testapp / inställningar.conf ”). Resten av koden är självförklarande.

Läsa en Conf-fil med ConfigParser

Att analysera en konfigurationsfil är ganska enkelt. ConfigParser försöker läsa ett värde med get (), getfloat (), getboolean () -metoder eller ordbokssyntax. Vid ett nyckelfel används värden från avsnittet STANDARD eller reservvärden. Det är en god praxis att definiera DEFAULT-avsnitt eller reservvärden för att förhindra nyckelfel. Du kan också använda försök utom för att undertrycka fel.

config = configparser.ConfigParser ()
konfigurera.läs (full_konfig_fil_sökväg)
 
is_sound_on = config ['User'].getboolean ('ljud')
volume_level = config ['User'].getfloat ('volym')
resolution = config ['User'] ['resolution']
 
# Fallvärde "Falsk" ignoreras eftersom det redan finns en STANDARD-sektion.
# I avsaknad av DEFAULT-sektionen kommer reservvärdet att användas på rätt sätt.
is_music_on = config ['User'].getboolean ('musik', falskt)
 
skriv ut (is_sound_on, is_music_on, volume_level, resolution)

I kodprovet ovan, “config.Läs ”uttalande används för att läsa data från en konfigurationsfil. I följande uttalanden används olika inbyggda get-metoder och ordboksnoteringar för att läsa informationen. I variabeldeklarationen “is_music_on” är det andra argumentet reservvärde (False). Observera att reservvärden har lägre företräde än värden som definieras i avsnittet STANDARD. Enkelt uttryckt har reservvärden ingen effekt när ett nyckel-värdepar redan finns i avsnittet STANDARD.

Fullständig kod

Nedan visas hela koden som kombinerar både skapandet av konfigurationsfilen och läsning av konfigurationsfilen.

#! / usr / bin / python3
importera configparser
importera os
 
app_name = "testapp"
config_folder = os.väg.gå med (os.väg.expanduser ("~"), '.config ', app_name)
os.makedirs (config_folder, exist_ok = True)
settings_file = "inställningar.conf "
full_config_file_path = os.väg.gå 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 "
 
om inte os.väg.finns (full_config_file_path)
eller os.stat (full_config_file_path).st_size == 0:
med öppen (full_config_file_path, 'w') som konfigurationsfil:
konfigurera.skriv (configfile)
 
konfigurera.läs (full_konfig_fil_sökväg)
is_sound_on = config ['User'].getboolean ('ljud')
volume_level = config ['User'].getfloat ('volym')
resolution = config ['User'] ['resolution']
 
# Fallvärde "Falskt" ignoreras eftersom det redan finns en STANDARD-sektion.
# I avsaknad av DEFAULT-sektionen kommer reservvärdet att användas på rätt sätt.
is_music_on = config ['User'].getboolean ('musik', falskt)
 
skriv ut (is_sound_on, is_music_on, volume_level, resolution)

Slutsats

ConfigParser i Python är ett användbart sätt att hantera inställningar för både kommandorads- och GUI Python-appar. Dessa konfigurationsfiler kan också användas som lätta textbaserade databaser men kanske inte lämpar sig för avancerade datatyper, stora datamängder och stort antal frågor.

Hur man använder GameConqueror Cheat Engine i Linux
Artikeln täcker en guide om hur du använder GameConqueror-fuskmotorn i Linux. Många användare som spelar spel på Windows använder ofta applikationen "...
Bästa spelkonsolemulatorer för Linux
Den här artikeln listar populära spelkonsolemuleringsprogram som finns tillgängliga för Linux. Emulation är ett mjukvarukompatibilitetsskikt som emule...
Bästa Linux Distros för spel 2021
Linux-operativsystemet har kommit långt från sitt ursprungliga, enkla, serverbaserade utseende. Detta operativsystem har förbättrats enormt de senaste...