Python

Kā lasīt un rakstīt INI un Conf failus, izmantojot Python

Kā lasīt un rakstīt INI un Conf failus, izmantojot Python
Python programmēšanas valodā ir noderīgs iebūvēts modulis ar nosaukumu “ConfigParser”, ko var izmantot, lai tīri ierakstītu lietotņu konfigurācijas parametrus. ConfigParser izmanto precīzi definētu un strukturētu konfigurācijas valodu, kas ir pilnībā saderīga ar INI failiem, kas atrodami Microsoft Windows. Šos INI failus var izmantot ar Python lietotnēm, kas darbojas arī Linux, un tie nodrošina pastāvīgu veidu, kā saglabāt un izgūt vērtības.

Linux operētājsistēmā biežāk redzams “.conf ”faili, nevis“.ini ”faili. Conf faili Linux ir tāpat kā citi teksta faili, un tāpēc tos var strukturēt jebkādā veidā. No parsētāja atkarīgs, kā tas interpretē “.conf ”fails. Python ConfigParser modulis var parsēt “.conf ”faili (vai jebkurš cits nejaušs paplašinājums), ja šie faili ir definēti ar INI saderīgā konfigurācijas valodā. Šis raksts paskaidros lasīšanu un rakstīšanu “.conf ”faili Linux, izmantojot jaunāko stabilo Python 3 versiju. Ņemiet vērā, ka, nomainot visus “.conf ”paplašinājums šajā rakstā ar.ini ”pagarinājums, rezultāts būtu tāds pats. Zemāk izskaidrotajam procesam un kodam vajadzētu būt lielākoties saderīgam arī ar Microsoft Windows, ar dažām nelielām atšķirībām. Lai gan šīs atšķirības netiks aplūkotas šajā rakstā.

ConfigParser modulis

Konfigurācijas failu parsētājs vai ConfigParser ir Python modulis, kas ļauj lasīt un rakstīt Python lietotnēs izmantotos konfigurācijas failus. Kā paskaidrots iepriekš, šis modulis atbalsta INI failu sintaksi. Ļoti vienkāršots “.ini ”/“.conf ”fails izskatās šādi.

[PAMATOJUMS]
skaņa = 1
mūzika = 1
tilpums = 0.8
izšķirtspēja = 1920x1080
[Lietotājs]
# skaņai kā iespējamās vērtības var būt 0 (nepatiesa) un 1 (patiesa)
skaņa = 1
; mūzikai kā iespējamās vērtības var būt 0 (nepatiesa) un 1 (patiesa)
mūzika = 0
Tilpums = 0.4
izšķirtspēja = 1280x720

Piemērs “.conf ”failā iepriekš ir divas sadaļas“ DEFAULT ”un“ User ”. Parasti Python programmas tiek kodētas tā, ka sadaļas DEFAULT vērtības nekad netiek mainītas. Sadaļa DEFAULT tiek izmantota, lai kopējās vai atsevišķās vērtības atiestatītu uz noklusējuma vērtībām. Lietotāja sadaļa atspoguļo izmaiņas, ko veicis galalietotājs, kurš izmanto programmu Python. Ievērojiet, ka sadaļu nosaukumi var būt jebkas, un nav obligāti jābūt sadaļai DEFAULT. Tomēr ikreiz, kad atrodas sadaļa “DEFAULT” (nosaukumam jābūt ar lielo burtu), tas tiks izmantots, lai droši nodrošinātu noklusējuma vērtības, ja ConfigParser neizdodas parsēt noteiktus mainīgos. Loģika, kā rīkoties ar šīm sadaļām, mainīgajiem zem tām un rezerves vērtībām, ir jānosaka pašā Python programmā. Simboli, piemēram, “#” un “;” var izmantot, lai apzīmētu komentārus “.conf ”faili. Visi atslēgu un vērtību pāri konfigurācijas failā nav reģistrjutīgi, parasti tiek rakstīti ar mazajiem burtiem.

Datatipu apstrāde ar ConfigParser

Pirms turpināt darbu ar dažiem ConfigParser piemēriem, ir svarīgi saprast, kā šajā modulī tiek apstrādāti datu tipi. Programmā ConfigParser katrs ierakstītā vai parsētā koda fragments ir virkne. Tas nevar atšķirt ciparus vai kādu citu formātu. Programmētājiem ir jāieraksta loģika savā programmā, lai pārveidotu virkni “1234” uz numuru, izmantojot int (“1234”), lasot datus no “.conf ”fails.

Lai gan konvertēšana uz skaitļiem, izmantojot int un float metodi, ir diezgan vienkāršs uzdevums, konvertēšana uz boolean var būt grūts, jo Python izturas pret bool (“any_string”) kā patiesu. Lai novērstu šo problēmu, varat izmantot nosacījuma paziņojumus, lai pārbaudītu noteiktu virkni. ConfigParser modulis nodrošina arī metodi ar nosaukumu “getboolean ()”. Šī metode var pareizi atšķirt “jā” / “nē”, “ieslēgta” / “izslēgta”, “patiesa” / “nepatiesa” un “1” / “0” Būla vērtības, pat ja tās ir virknes. Jūsu ērtībai ConfigParser ietver arī metodes getint () un getfloat ().

Jauna Conf faila rakstīšana un saglabāšana, izmantojot ConfigParser

Pieņemsim, ka.conf ”fails, kas minēts iepriekš, neeksistē, un jūs vēlaties to izveidot automātiski, pirmo reizi palaižot programmu. Zemāk esošais kods radīs jaunus iestatījumus.conf ”fails direktorijā, no kura palaista Python programma.

importēt konfigurētāk
config = configparser.ConfigParser ()
config ['DEFAULT'] = "skaņa": "1", "mūzika": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
ar atvērtu ('iestatījumi.conf ',' w ') kā configfile:
konfigurēt.rakstīt (configfile)

Ar pirmo paziņojumu iepriekš minētajā kodā tiek importēts ConfigParser modulis. Otrais paziņojums izveido vārdnīcai līdzīgu objektu ar nosaukumu “config”. Tagad varat izmantot standarta Python vārdnīcas sintaksi, lai definētu tajā iekļautās sadaļas un mainīgos, kā tas redzams no nākamajiem diviem apgalvojumiem. Visbeidzot, ar paziņojumu “ar atvērtu” tiek izveidoti jauni iestatījumi.conf ”fails un failā ieraksta konfigurācijas sadaļas.

Iepriekš minētais kods darbojas, taču ar to ir neliela problēma. Katru reizi, kad tiek palaista programma, tiek izveidots jauns iestatījumu fails, kā rezultātā tiek pārrakstīts jebkurš lietotāja veiktais iestatījumu faila labojums. Lai novērstu šo problēmu, jums jāpārbauda divi nosacījumi:

Zemāk redzamais modificētais kods pārbaudīs abus nosacījumus un izveidos jaunu iestatījumu failu tikai tad, ja šie divi nosacījumi būs izpildīti.

importēt konfigurāciju
importēt os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "skaņa": "1", "mūzika": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
settings_file = os.ceļš.dirname (os.ceļš.reālais ceļš (__ fails__))
+ os.sep + "iestatījumi.konf. "
ja ne os.ceļš.pastāv (iestatījumu_fails)
vai os.stat (iestatījumu_fails).st_size == 0:
ar atvērtu ('iestatījumi.conf ',' w ') kā configfile:
konfigurēt.rakstīt (configfile)

Otrais paziņojums kodā iepriekš importē moduli “os”. Mainīgais “settings_file” saglabā visu ceļu uz iestatījumiem.conf ”fails, kas jāizveido Python skripta direktorijā. Nākamajā paziņojumā tiek pārbaudīti divi iepriekš minētie nosacījumi. Paziņojuma pirmā klauzula ir pašsaprotama. Otrais punkts pārbauda, ​​vai faila lielums ir “0 baiti”. Nulles baitu fails nozīmētu tukšu failu, kurā nebūtu saglabāti dati. Pārējais kods ir tāds pats kā pirmais iepriekš minētais piemērs.

Pagaidām iepriekš izskaidrotie kodu paraugi saglabā konfigurācijas failu paša Python skripta direktorijā. Tomēr ir ierasta prakse un freedesktop standarts, ja konfigurācijas failus saglabā “.config ”direktoriju mājas mapē. Zemāk esošais koda paraugs radīs jaunus iestatījumus.conf ”failā“ ~ /.config / testapp ”mapi.

importēt konfigurētāk
importēt os
 
app_name = "testapp"
config_folder = os.ceļš.pievienoties (os.ceļš.paplašinātājs ("~"), '.config ', lietotnes_nosaukums)
os.makedirs (config_folder, exist_ok = True)
settings_file = "iestatījumi.konf. "
full_config_file_path = os.ceļš.pievienoties (config_folder, settings_file)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "skaņa": "1", "mūzika": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
 
ja ne os.ceļš.pastāv (full_config_file_path)
vai os.stat (full_config_file_path).st_size == 0:
ar atvērtu (full_config_file_path, 'w') kā configfile:
konfigurēt.rakstīt (configfile)

Iepriekš minētais kods ir gandrīz tāds pats kā iepriekšējā piemērā, izņemot to, ka tas maina “iestatījumu” atrašanās vietu.conf ”fails uz“ ~ /.config / testapp / settings.konf ”. Mainīgais “config_folder” saglabā pilnu ceļu uz lietojumprogrammas mapi, kas jāizveido mapē “.config ”direktorijs (“ ~ /.config / testapp / ”). “OS.makedirs ”izraksts izveidos jaunu lietotņu mapi tikai tad, ja tās vēl nav. Mainīgais “full_config_file_path” saglabā visu iestatījumu faila ceļu (“~ /.config / testapp / settings.konf ”). Pārējais kods nav pašsaprotams.

Conf faila lasīšana, izmantojot ConfigParser

Parsēt konfigurācijas failu ir diezgan vienkārši. ConfigParser mēģina nolasīt vērtību, izmantojot metodes get (), getfloat (), getboolean () vai vārdnīcas sintaksi. Galvenās kļūdas gadījumā tiek izmantotas vērtības no DEFAULT sadaļas vai rezerves vērtības. Lai novērstu galvenās kļūdas, ir laba sadaļas vai rezerves vērtību definēšana pēc noklusējuma. Kļūdu nomākšanai varat izmantot arī paziņojumus try-izņemot.

config = configparser.ConfigParser ()
konfigurēt.lasīt (full_config_file_path)
 
is_sound_on = config ['Lietotājs'].getboolean ('skaņa')
apjoma_līmenis = config ['Lietotājs'].getfloat ('apjoms')
izšķirtspēja = config ['Lietotājs'] ['Izšķirtspēja']
 
# Rezerves vērtība "False" tiks ignorēta, jo jau ir sadaļa DEFAULT.
# Ja nav sadaļas DEFAULT, pienācīgi tiks izmantota rezerves vērtība.
is_music_on = config ['Lietotājs'].getboolean ('mūzika', nepatiesa)
 
drukāt (is_sound_on, is_music_on, volume_level, resolution)

Iepriekš redzamajā koda paraugā “config.lasīt ”paziņojums tiek izmantots, lai nolasītu datus no konfigurācijas faila. Turpmākajos paziņojumos datu lasīšanai tiek izmantotas dažādas iebūvētās iegūšanas metodes un vārdnīcu apzīmējumi. Mainīgā “is_music_on” deklarācijā otrais arguments ir rezerves vērtība (False). Ņemiet vērā, ka rezerves vērtībām būs mazāka prioritāte nekā vērtībām, kas definētas sadaļā NOLIKTĀ. Vienkārši sakot, rezerves vērtībām nebūs nekādas ietekmes, ja atslēgu un vērtību pāris jau atrodas sadaļā PAMATOJUMS.

Pilns kods

Zemāk ir viss kods, kas apvieno gan konfigurācijas faila pirmās palaišanas izveidi, gan konfigurācijas faila nolasīšanu.

#! / usr / bin / python3
importēt konfigurāciju
importēt os
 
app_name = "testapp"
config_folder = os.ceļš.pievienoties (os.ceļš.paplašinātājs ("~"), '.config ', lietotnes_nosaukums)
os.makedirs (config_folder, exist_ok = True)
settings_file = "iestatījumi.konf. "
full_config_file_path = os.ceļš.pievienoties (config_folder, settings_file)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "skaņa": "1", "mūzika": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"apjoms": "0.8 "," izšķirtspēja ":" 1920x1080 "
 
ja ne os.ceļš.pastāv (full_config_file_path)
vai os.stat (full_config_file_path).st_size == 0:
ar atvērtu (full_config_file_path, 'w') kā configfile:
konfigurēt.rakstīt (configfile)
 
konfigurēt.lasīt (full_config_file_path)
is_sound_on = config ['Lietotājs'].getboolean ('skaņa')
volume_level = config ['Lietotājs'].getfloat ('apjoms')
izšķirtspēja = config ['Lietotājs'] ['Izšķirtspēja']
 
# Rezerves vērtība "False" tiks ignorēta, jo jau ir sadaļa DEFAULT.
# Ja nav sadaļas DEFAULT, pienācīgi tiks izmantota rezerves vērtība.
is_music_on = config ['Lietotājs'].getboolean ('mūzika', nepatiesa)
 
drukāt (is_sound_on, is_music_on, volume_level, resolution)

Secinājums

ConfigParser Python nodrošina noderīgu veidu, kā apstrādāt gan komandrindas, gan GUI Python lietotņu iestatījumus. Šos konfigurācijas failus var izmantot arī kā vieglas teksta bāzes datubāzes, taču tās var nebūt piemērotas uzlabotiem datu tipiem, lielām datu kopām un lielam vaicājumu skaitam.

How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Izmantojot X-Mouse Button Control, atšķirīgi mainiet peles pogas atšķirīgai programmatūrai
Varbūt jums ir nepieciešams rīks, kas varētu mainīt peles vadību ar katru lietoto lietojumprogrammu. Ja tas tā ir, varat izmēģināt lietojumprogrammu a...
Microsoft Sculpt Touch bezvadu peles apskats
Es nesen lasīju par Microsoft Sculpt Touch bezvadu pele un nolēma to nopirkt. Pēc kāda laika izmantošanas es nolēmu dalīties savā pieredzē ar to. Šo b...