Python

Cara Membaca dan Menulis Fail INI dan Conf Menggunakan Python

Cara Membaca dan Menulis Fail INI dan Conf Menggunakan Python
Bahasa pengaturcaraan Python dilengkapi dengan modul bawaan berguna yang disebut "ConfigParser" yang dapat digunakan untuk menulis parameter konfigurasi untuk aplikasi dengan bersih. ConfigParser menggunakan bahasa konfigurasi yang ditentukan dan tersusun sepenuhnya serasi dengan fail INI yang terdapat di Microsoft Windows. Fail INI ini dapat digunakan dengan aplikasi Python yang berjalan di Linux juga dan mereka menyediakan cara yang berterusan untuk menyimpan dan mengambil nilai.

Di Linux, lebih umum melihat ".fail "conf daripada".fail ini. Fail konfigurasi di Linux sama seperti fail teks lain dan oleh itu, fail tersebut dapat disusun dengan cara apa pun. Ia bergantung pada penghuraian bagaimana ia menafsirkan “.fail conf ”. Modul Python ConfigParser dapat menguraikan “.fail conf ”juga (atau pelanjutan rawak lain), dengan syarat fail-fail ini ditentukan dalam bahasa konfigurasi yang serasi dengan INI. Artikel ini akan menjelaskan membaca dan menulis “.fail conf ”dalam Linux menggunakan versi stabil terbaru Python 3. Perhatikan bahawa jika anda mengganti semua kejadian “.sambungan "sambungan dalam artikel ini dengan".lanjutan ini, hasilnya akan sama. Proses dan kod yang dijelaskan di bawah ini mestilah serasi dengan Microsoft Windows juga, dengan beberapa perbezaan kecil. Walaupun perbezaan ini tidak akan dibahas dalam artikel ini.

Modul ConfigParser

Parser fail konfigurasi atau ConfigParser adalah modul Python yang membolehkan anda membaca dan menulis fail konfigurasi yang digunakan dalam aplikasi Python. Seperti yang dijelaskan di atas, modul ini menyokong sintaks fail INI. Sangat sederhana ".ini "/".fail conf ”kelihatan seperti ini.

[DEFAULT]
bunyi = 1
muzik = 1
isipadu = 0.8
peleraian = 1920x1080
[Pengguna]
# suara boleh mempunyai nilai 0 (salah) dan 1 (benar) mungkin
bunyi = 1
; muzik boleh mempunyai nilai 0 (salah) dan 1 (benar) mungkin
muzik = 0
Isipadu = 0.4
peleraian = 1280x720

Contohnya ".fail conf "di atas mempunyai dua bahagian," DEFAULT "dan" User ". Biasanya program Python dikodkan sedemikian rupa sehingga nilai bahagian DEFAULT tidak pernah berubah. Bahagian DEFAULT digunakan untuk menetapkan semula nilai keseluruhan atau individu ke nilai lalai. Bahagian pengguna mencerminkan perubahan yang dibuat oleh pengguna akhir yang menggunakan program Python. Perhatikan bahawa nama bahagian boleh menjadi apa-apa dan tidak perlu mempunyai bahagian DEFAULT sama sekali. Walau bagaimanapun, setiap kali bahagian "DEFAULT" (nama harus dalam huruf besar), ia akan digunakan untuk memberikan nilai lalai dengan selamat jika ConfigParser gagal mengurai pembolehubah tertentu. Logik untuk menangani bahagian-bahagian ini, pemboleh ubah di bawahnya dan nilai fallback mesti ditentukan dalam program Python itu sendiri. Simbol seperti "#" dan ";" dapat digunakan untuk menunjukkan komen di “.fail conf ”. Semua pasangan nilai-kunci dalam fail konfigurasi tidak peka huruf besar kecil, biasanya ditulis dengan huruf kecil.

Pengendalian Jenis Data Oleh ConfigParser

Sebelum meneruskan beberapa contoh ConfigParser, penting untuk memahami pengendalian jenis data oleh modul ini. Untuk ConfigParser, setiap bahagian kod bertulis atau dihurai adalah rentetan. Ia tidak dapat membezakan antara nombor atau format lain. Pengaturcara perlu menulis logik dalam program mereka untuk menukar rentetan "1234" menjadi angka dengan menggunakan int ("1234") sambil membaca data dari ".fail conf ”.

Walaupun menukar ke nombor menggunakan kaedah int dan float adalah tugas yang cukup mudah, menukar ke boolean boleh menjadi rumit kerana Python memperlakukan bool ("any_string") menjadi Benar. Untuk mengatasi masalah ini, anda boleh menggunakan pernyataan bersyarat yang memeriksa rentetan tertentu. Modul ConfigParser juga menyediakan kaedah yang disebut "getboolean ()". Kaedah ini dapat membezakan dengan betul 'ya' / 'tidak', 'on' / 'off', 'true' / 'false' dan '1' / '0' boolean walaupun mereka adalah rentetan. ConfigParser juga merangkumi kaedah getint () dan getfloat () untuk kemudahan anda.

Menulis dan Menyimpan Fail Conf Baru dengan menggunakan ConfigParser

Mari kita anggap ".fail conf ”yang disebutkan di atas tidak wujud dan anda mahu membuatnya secara automatik pada pelancaran pertama program. Kod di bawah akan membuat tetapan “baru”.conf ”dalam direktori dari mana program Python dijalankan.

import configparser
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
dengan tetapan terbuka ('.conf ',' w ') sebagai configfile:
konfigurasi.tulis (configfile)

Pernyataan pertama dalam kod di atas mengimport modul ConfigParser. Pernyataan kedua membuat objek seperti kamus yang disebut "config". Anda kini boleh menggunakan sintaks kamus Python standard untuk menentukan bahagian dan pemboleh ubah yang disertakan di bawahnya, seperti yang dapat dilihat dari dua pernyataan seterusnya. Terakhir pernyataan "dengan terbuka" membuat tetapan "baru.conf ”dan menulis bahagian konfigurasi ke fail.

Kod di atas berfungsi, tetapi ada masalah kecil dengannya. Ini membuat file tetapan baru setiap kali program dijalankan, sehingga menimpa setiap pengeditan yang dibuat oleh pengguna ke file pengaturan. Untuk menyelesaikan masalah ini, anda perlu memeriksa dua syarat:

Kod yang diubah di bawah akan memeriksa dua syarat dan hanya akan membuat fail tetapan baru sekiranya kedua-dua syarat ini dipenuhi.

import configparser
import os
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
setting_file = os.jalan.nama panggilan (os.jalan.jalan sebenar (__ fail__))
+ os.tetapan sep + ".conf "
jika tidak os.jalan.ada (setting_file)
atau os.stat (setting_file).st_size == 0:
dengan tetapan terbuka ('.conf ',' w ') sebagai configfile:
konfigurasi.tulis (configfile)

Pernyataan kedua dalam kod di atas mengimport modul "os". Pemboleh ubah "settings_file" menyimpan jalan penuh ke tetapan ".fail conf yang akan dibuat dalam direktori skrip Python. Pernyataan seterusnya memeriksa dua keadaan yang disebutkan di atas. Klausa pertama dalam penyataan tersebut adalah jelas. Klausa kedua memeriksa apakah ukuran fail adalah "0 bait". Fail byte sifar bermaksud fail kosong tanpa data yang tersimpan di dalamnya. Selebihnya kod adalah sama dengan contoh pertama yang dinyatakan di atas.

Sejauh ini contoh kod yang dijelaskan di atas menyimpan fail konfigurasi dalam direktori skrip Python itu sendiri. Namun, ini adalah amalan biasa dan standard freedesktop untuk menyimpan fail konfigurasi di “.direktori config ”di folder utama. Contoh kod di bawah akan membuat tetapan “baru.fail conf dalam "~ /.folder config / testapp ”.

import configparser
import os
 
app_name = "testapp"
config_folder = os.jalan.sertai (os.jalan.pengembang ("~"), '.config ', app_name)
os.makedirs (config_folder, υπάρχον_ok = Benar)
setting_file = "tetapan.conf "
full_config_file_path = os.jalan.sertai (config_folder, settings_file)
 
config = configparser.ConfigParser ()
config ['DEFAULT'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
 
jika tidak os.jalan.ada (full_config_file_path)
atau os.stat (full_config_file_path).st_size == 0:
dengan open (full_config_file_path, 'w') sebagai configfile:
konfigurasi.tulis (configfile)

Kod di atas hampir sama dengan contoh sebelumnya, kecuali ia mengubah lokasi "tetapan.fail conf ke "~ /.config / testapp / tetapan.conf ”. Pemboleh ubah "config_folder" menyimpan jalan penuh ke folder aplikasi yang akan dibuat di ".direktori config "(" ~ /.config / testapp / ”). “Os.pernyataan makedirs hanya akan membuat folder aplikasi baru jika belum ada. Pemboleh ubah "full_config_file_path" menyimpan laluan penuh fail tetapan ("~ /.config / testapp / tetapan.conf ”). Selebihnya kod adalah jelas.

Membaca Fail Conf Menggunakan ConfigParser

Menghuraikan fail konfigurasi cukup mudah. ConfigParser cuba membaca nilai menggunakan kaedah get (), getfloat (), getboolean () atau sintaks kamus. Sekiranya berlaku kesalahan utama, nilai dari bahagian DEFAULT atau nilai fallback digunakan. Adalah amalan yang baik untuk menentukan bahagian DEFAULT atau nilai fallback untuk mengelakkan kesalahan utama. Anda juga boleh menggunakan pernyataan kecuali percubaan untuk mengatasi kesilapan.

config = configparser.ConfigParser ()
konfigurasi.baca (full_config_file_path)
 
is_sound_on = config ['Pengguna'].getboolean ('bunyi')
volume_level = config ['Pengguna'].getfloat ('kelantangan')
resolusi = konfigurasi ['Pengguna'] ['resolusi']
 
# Nilai kejatuhan "Salah" akan diabaikan kerana sudah ada bahagian DEFAULT.
# Sekiranya tiada bahagian DEFAULT, nilai fallback akan digunakan dengan sewajarnya.
is_music_on = config ['Pengguna'].getboolean ('muzik', Salah)
 
cetak (is_sound_on, is_music_on, volume_level, resolution)

Dalam contoh kod di atas, "config.pernyataan read ”digunakan untuk membaca data dari fail konfigurasi. Dalam pernyataan berikut, pelbagai kaedah get dan notasi kamus digunakan untuk membaca data. Dalam deklarasi pemboleh ubah "is_music_on", argumen kedua adalah nilai mundur (Salah). Perhatikan bahawa nilai fallback akan mempunyai keutamaan yang lebih rendah daripada nilai yang ditentukan dalam bahagian DEFAULT. Secara sederhana, nilai fallback tidak akan berpengaruh apabila pasangan nilai-kunci sudah ada di bahagian DEFAULT.

Kod Penuh

Di bawah ini adalah keseluruhan kod yang menggabungkan penciptaan pertama untuk fail konfigurasi dan pembacaan fail konfigurasi.

#! / usr / bin / ular sawa3
import configparser
import os
 
app_name = "testapp"
config_folder = os.jalan.sertai (os.jalan.pengembang ("~"), '.config ', app_name)
os.makedirs (config_folder, υπάρχον_ok = Benar)
setting_file = "tetapan.conf "
full_config_file_path = os.jalan.sertai (config_folder, settings_file)
 
config = configparser.ConfigParser ()
 
config ['DEFAULT'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
config ['User'] = "sound": "1", "music": "1",
"kelantangan": "0.8 "," resolusi ":" 1920x1080 "
 
jika tidak os.jalan.ada (full_config_file_path)
atau os.stat (full_config_file_path).st_size == 0:
dengan open (full_config_file_path, 'w') sebagai configfile:
konfigurasi.tulis (configfile)
 
konfigurasi.baca (full_config_file_path)
is_sound_on = config ['Pengguna'].getboolean ('bunyi')
volume_level = config ['Pengguna'].getfloat ('kelantangan')
resolusi = konfigurasi ['Pengguna'] ['resolusi']
 
# Nilai kejatuhan "Salah" akan diabaikan kerana sudah ada bahagian DEFAULT.
# Sekiranya tiada bahagian DEFAULT, nilai fallback akan digunakan dengan sewajarnya.
is_music_on = config ['Pengguna'].getboolean ('muzik', Salah)
 
cetak (is_sound_on, is_music_on, volume_level, resolution)

Kesimpulannya

ConfigParser di Python menyediakan cara yang berguna untuk menangani tetapan kedua baris perintah dan aplikasi GUI Python. Fail konfigurasi ini juga dapat digunakan sebagai pangkalan data berasaskan teks ringan tetapi mungkin tidak sesuai untuk jenis data lanjutan, set data besar dan sebilangan besar pertanyaan.

Alat Berguna untuk Pemain Linux
Sekiranya anda suka bermain permainan di Linux, kemungkinan anda telah menggunakan aplikasi dan utiliti seperti Wine, Lutris dan OBS Studio untuk meni...
HD Remastered Games untuk Linux yang Tidak Pernah Melancarkan Linux Sebelumnya
Banyak pembangun dan penerbit permainan hadir dengan penghapus HD permainan lama untuk memperpanjang usia francais, harap peminat meminta keserasian d...
Cara Menggunakan AutoKey untuk Mengautomasikan Permainan Linux
AutoKey adalah utiliti automasi desktop untuk Linux dan X11, yang diprogramkan dalam Python 3, GTK dan Qt. Dengan menggunakan skrip dan fungsi MACRO, ...