piton

Python Kullanarak INI ve Conf Dosyaları Nasıl Okunur ve Yazılır

Python Kullanarak INI ve Conf Dosyaları Nasıl Okunur ve Yazılır
Python programlama dili, uygulamalar için yapılandırma parametrelerini temiz bir şekilde yazmak için kullanılabilen "ConfigParser" adlı kullanışlı bir yerleşik modülle birlikte gelir. ConfigParser, Microsoft Windows'ta bulunan INI dosyalarıyla tam uyumlu, iyi tanımlanmış ve yapılandırılmış bir yapılandırma dili kullanır. Bu INI dosyaları, Linux'ta çalışan Python uygulamalarıyla da kullanılabilir ve değerleri depolamak ve almak için kalıcı bir yol sağlarlar.

Linux'ta ".conf” dosyaları yerine “.ini” dosyaları. Linux'taki conf dosyaları diğer metin dosyaları gibidir ve bu nedenle herhangi bir şekilde yapılandırılabilirler. Ayrıştırıcıya bir “ nasıl yorumladığına bağlıdır.conf” dosyası. Python'un ConfigParser modülü, “.conf” dosyalarını da (veya diğer rastgele uzantıları), bu dosyaların INI uyumlu yapılandırma dilinde tanımlanmış olması koşuluyla. Bu makale okuma ve yazmayı açıklayacaktır “.Python 3'ün en son kararlı sürümünü kullanan Linux'ta conf” dosyaları. “ Tüm oluşumlarını değiştirirseniz, şunu unutmayın:.conf” uzantısı ile bu makaledeki.ini” uzantısı, sonuç aynı olurdu. Aşağıda açıklanan işlem ve kod, birkaç küçük farklılık dışında, çoğunlukla Microsoft Windows ile uyumlu olmalıdır. Bu farklılıklar bu makalede ele alınmayacak olsa da.

ConfigParser Modülü

Yapılandırma dosyası ayrıştırıcısı veya ConfigParser, Python uygulamalarında kullanılan yapılandırma dosyalarını okumanıza ve yazmanıza izin veren bir Python modülüdür. Yukarıda açıklandığı gibi, bu modül INI dosya sözdizimini destekler. Çok basit"."/".conf” dosyası şöyle görünür.

[VARSAYILAN]
ses = 1
müzik = 1
hacim = 0.8
çözünürlük = 1920x1080
[Kullanıcı]
# ses, olası değerler olarak 0 (yanlış) ve 1 (doğru) olabilir
ses = 1
; müzik, olası değerler olarak 0 (yanlış) ve 1 (doğru) olabilir
müzik = 0
Hacim = 0.4
çözünürlük = 1280x720

Örnek ".Yukarıdaki conf” dosyasının “DEFAULT” ve “User” olmak üzere iki bölümü vardır. Genellikle Python programları, VARSAYILAN bölüm değerleri asla değiştirilmeyecek şekilde kodlanır. VARSAYILAN bölümü, genel veya bireysel değerleri varsayılan değerlere sıfırlamak için kullanılır. Kullanıcı bölümü, Python programını kullanan bir son kullanıcı tarafından yapılan değişiklikleri yansıtır. Bölüm adlarının herhangi bir şey olabileceğini ve bir VARSAYILAN bölümün olması gerekmediğini unutmayın. Ancak, "VARSAYILAN" bölümü mevcut olduğunda (ad büyük harf olmalıdır), ConfigParser belirli değişkenleri ayrıştırmayı başaramazsa, varsayılan değerleri güvenli bir şekilde sağlamak için kullanılacaktır. Bu bölümleri, altlarındaki değişkenleri ve geri dönüş değerlerini işleme mantığı Python programının kendisinde tanımlanmalıdır. “#” ve “;” gibi simgeler " içindeki yorumları belirtmek için kullanılabilir.conf” dosyaları. Yapılandırma dosyasındaki tüm anahtar/değer çiftleri büyük/küçük harfe duyarsızdır ve genellikle küçük harfle yazılır.

ConfigParser Tarafından İşlenen Veri Tipleri

Bazı ConfigParser örnekleriyle ilerlemeden önce, bu modül tarafından işlenen veri tiplerini anlamak önemlidir. ConfigParser için, yazılan veya ayrıştırılan her kod parçası bir dizedir. Sayılar veya başka herhangi bir format arasında ayrım yapamaz. Programcıların bir “1234” dizesini int(“1234”) kullanarak bir “dizisinden veri okurken” sayıya dönüştürmek için programlarına mantık yazmaları gerekir.conf” dosyası.

int ve float yöntemini kullanarak sayılara dönüştürmek oldukça kolay bir iş olsa da, Python bool(“any_string”) işlevini True olarak ele aldığından boolea dönüştürmek zor olabilir. Bu sorunun üstesinden gelmek için belirli bir dizeyi kontrol eden koşullu ifadeleri kullanabilirsiniz. ConfigParser modülü ayrıca “getboolean()” adlı bir yöntem sağlar. Bu yöntem, 'yes'/'no', 'on'/'off', 'true'/'false' ve '1'/'0' boolean değerlerini string olsalar bile doğru bir şekilde ayırt edebilir. ConfigParser ayrıca size kolaylık olması için getint() ve getfloat() yöntemlerini de içerir.

ConfigParser Kullanarak Yeni Bir Conf Dosyası Yazma ve Kaydetme

varsayalım ki “.conf” dosyası mevcut değil ve programın ilk açılışında otomatik olarak oluşturmak istiyorsunuz. Aşağıdaki kod yeni bir “ayarlar” oluşturacaktır.Python programının çalıştırıldığı dizindeki conf” dosyası.

yapılandırma ayrıştırıcısını içe aktar
yapılandırma = yapılandırma ayrıştırıcı.ConfigParser()
config['DEFAULT'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
config['Kullanıcı'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
open ile ('ayarlar.conf', 'w') yapılandırma dosyası olarak:
yapılandırma.yaz(yapılandırma dosyası)

Yukarıdaki koddaki ilk ifade, ConfigParser modülünü içe aktarır. İkinci ifade, "config" adlı sözlük benzeri bir nesne oluşturur. Sonraki iki ifadeden de anlaşılacağı gibi, altlarında bulunan bölümleri ve değişkenleri tanımlamak için artık standart Python sözlük sözdizimini kullanabilirsiniz. Son olarak “with open” ifadesi yeni bir “ayarlar” oluşturur.conf” dosyasını açar ve dosyaya yapılandırma bölümlerini yazar.

Yukarıdaki kod çalışıyor, ancak bununla ilgili küçük bir sorun var. Program her çalıştırıldığında yeni bir ayar dosyası oluşturur, bu da ayarlar dosyasında kullanıcı tarafından yapılan düzenlemelerin üzerine yazılmasına neden olur. Bu sorunu gidermek için iki koşulu kontrol etmeniz gerekir:

Aşağıdaki değiştirilmiş kod, iki koşulu kontrol edecek ve yalnızca bu iki koşulun karşılanması durumunda yeni bir ayar dosyası oluşturacaktır.

yapılandırma ayrıştırıcısını içe aktar
işletim sistemini içe aktar
 
yapılandırma = yapılandırma ayrıştırıcı.ConfigParser()
config['DEFAULT'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
config['Kullanıcı'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
settings_file = işletim sistemi.yol.dizin adı.yol.gerçek yol(__file__))
+ işletim sistemi.eylül + "ayarları.konf"
işletim sistemi değilse.yol.var(settings_file)
veya işletim sistemi.stat(ayarlar_dosyası).st_size == 0:
open ile ('ayarlar.conf', 'w') yapılandırma dosyası olarak:
yapılandırma.yaz(yapılandırma dosyası)

Yukarıdaki koddaki ikinci ifade “os” modülünü içe aktarır. “settings_file” değişkeni, “ayarlara” giden tam yolu saklar.Python betiğinin dizininde oluşturulacak conf” dosyası. Sonraki ifade, yukarıda belirtilen iki koşulu kontrol eder. Açıklamadaki ilk madde açıklayıcıdır. İkinci fıkra, dosya boyutunun “0 bayt” olup olmadığını kontrol eder. Sıfır baytlık bir dosya, içinde hiçbir verinin saklanmadığı boş bir dosya anlamına gelir. Kodun geri kalanı yukarıda belirtilen ilk örnekle aynıdır.

Şimdiye kadar yukarıda açıklanan kod örnekleri, yapılandırma dosyasını Python betiğinin kendi dizinine kaydeder. Bununla birlikte, yapılandırma dosyalarını "" klasörüne kaydetmek yaygın bir uygulamadır ve ücretsiz masaüstü standardıdır.ana klasördeki config” dizini. Aşağıdaki kod örneği yeni bir "ayarlar" oluşturacaktır.conf” dosyasında “~/.config/testapp” klasörü.

yapılandırma ayrıştırıcısını içe aktar
işletim sistemini içe aktar
 
app_name = "testapp"
config_folder = işletim sistemi.yol.katılmak.yol.genişletici("~"), '.yapılandırma', uygulama_adı)
işletim sistemi.makedirs(config_folder, entity_ok=Doğru)
settings_file = "ayarlar.konf"
full_config_file_path = işletim sistemi.yol.katıl(config_folder, settings_file)
 
yapılandırma = yapılandırma ayrıştırıcı.ConfigParser()
config['DEFAULT'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
config['Kullanıcı'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
 
işletim sistemi değilse.yol.var(full_config_file_path)
veya işletim sistemi.stat(full_config_file_path).st_size == 0:
configfile olarak open(full_config_file_path, 'w') ile:
yapılandırma.yaz(yapılandırma dosyası)

Yukarıdaki kod, "ayarların" konumunu değiştirmesi dışında, önceki örnekle neredeyse aynıdır.conf” dosyasını “~/.yapılandırma/testapp/ayarlar.konf”. "config_folder" değişkeni, " içinde oluşturulacak uygulama klasörünün tam yolunu saklar.config” dizini (“~/.yapılandırma/testapp/”). "os".makedirs” ifadesi, henüz mevcut değilse yalnızca yeni bir uygulama klasörü oluşturacaktır. “full_config_file_path” değişkeni, ayarlar dosyasının tam yolunu (“~/.yapılandırma/testapp/ayarlar.konf"). Kodun geri kalanı açıklayıcıdır.

ConfigParser Kullanarak Bir Conf Dosyasını Okuma

Bir yapılandırma dosyasını ayrıştırmak oldukça basittir. ConfigParser, get(), getfloat(), getboolean() yöntemlerini veya sözlük sözdizimini kullanarak bir değeri okumaya çalışır. Bir anahtar hatası durumunda, VARSAYILAN bölümündeki değerler veya geri dönüş değerleri kullanılır. Anahtar hatalarını önlemek için VARSAYILAN bölüm veya geri dönüş değerleri tanımlamak iyi bir uygulamadır. Hataları bastırmak için try-except deyimlerini de kullanabilirsiniz.

yapılandırma = yapılandırma ayrıştırıcı.ConfigParser()
yapılandırma.oku(full_config_file_path)
 
is_sound_on = config['Kullanıcı'].getboolean('ses')
volume_level = config['Kullanıcı'].getfloat('hacim')
çözünürlük = yapılandırma['Kullanıcı']['çözünürlük']
 
# Zaten bir DEFAULT bölümü olduğu için "False" geri dönüş değeri yoksayılacak.
# DEFAULT bölümünün olmaması durumunda, geri dönüş değeri usulüne uygun olarak kullanılacaktır.
is_music_on = config['Kullanıcı'].getboolean('müzik', Yanlış)
 
yazdır (is_sound_on, is_music_on, volume_level, çözünürlük)

Yukarıdaki kod örneğinde, “config.read” ifadesi, bir yapılandırma dosyasından veri okumak için kullanılır. Aşağıdaki ifadelerde, verileri okumak için çeşitli yerleşik get yöntemleri ve sözlük gösterimleri kullanılır. “is_music_on” değişken bildiriminde, ikinci argüman geri dönüş değeridir (False). Yedek değerlerin, VARSAYILAN bölümünde tanımlanan değerlerden daha düşük önceliğe sahip olacağını unutmayın. Basit bir ifadeyle, VARSAYILAN bölümünde zaten bir anahtar/değer çifti mevcut olduğunda, yedek değerlerin hiçbir etkisi olmayacaktır.

Tam Kod

Aşağıda, hem yapılandırma dosyasının ilk çalıştırma oluşturmasını hem de yapılandırma dosyasının okunmasını birleştiren kodun tamamı verilmiştir.

#! /usr/bin/python3
yapılandırma ayrıştırıcısını içe aktar
işletim sistemini içe aktar
 
app_name = "testapp"
config_folder = işletim sistemi.yol.katılmak.yol.genişletici("~"), '.yapılandırma', uygulama_adı)
işletim sistemi.makedirs(config_folder, entity_ok=Doğru)
settings_file = "ayarlar.konf"
full_config_file_path = işletim sistemi.yol.katıl(config_folder, settings_file)
 
yapılandırma = yapılandırma ayrıştırıcı.ConfigParser()
 
config['DEFAULT'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
config['Kullanıcı'] = "ses": "1", "müzik": "1",
"hacim" : "0.8", "çözünürlük": "1920x1080"
 
işletim sistemi değilse.yol.var(full_config_file_path)
veya işletim sistemi.stat(full_config_file_path).st_size == 0:
configfile olarak open(full_config_file_path, 'w') ile:
yapılandırma.yaz(yapılandırma dosyası)
 
yapılandırma.oku(full_config_file_path)
is_sound_on = config['Kullanıcı'].getboolean('ses')
volume_level = config['Kullanıcı'].getfloat('hacim')
çözünürlük = yapılandırma['Kullanıcı']['çözünürlük']
 
# Zaten bir DEFAULT bölümü olduğu için "False" geri dönüş değeri yoksayılacak.
# DEFAULT bölümünün olmaması durumunda, geri dönüş değeri usulüne uygun olarak kullanılacaktır.
is_music_on = config['Kullanıcı'].getboolean('müzik', Yanlış)
 
yazdır (is_sound_on, is_music_on, volume_level, çözünürlük)

Sonuç

Python'da ConfigParser, hem komut satırı hem de GUI Python uygulamalarının ayarlarını işlemek için kullanışlı bir yol sağlar. Bu yapılandırma dosyaları, hafif metin tabanlı veritabanları olarak da kullanılabilir ancak gelişmiş veri türleri, büyük veri kümeleri ve çok sayıda sorgu için uygun olmayabilir.

Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...
Linux'ta oyun oturumunuzu nasıl yakalar ve yayınlarsınız?
Geçmişte oyun oynamak sadece bir hobi olarak görülüyordu, ancak zamanla oyun endüstrisi teknoloji ve oyuncu sayısı açısından büyük bir büyüme gördü. Ç...
El Takibiyle Oynanabilecek En İyi Oyunlar
Oculus Quest kısa süre önce, kontrolörler olmadan elle takip etme harika fikrini tanıttı. Resmi olarak veya SideQuest aracılığıyla destek sağlayan sür...