Mario

WFN Üye
Konular
622
Mesajlar
622
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Zonguldak
Web Sitesi
Var
Alanı
Google Optimiz.
1/1
Konu sahibi
Klasördeki dosyaları uzantısına göre filtrelemek için pathlib modülündeki Path.glob() yöntemini kullanabilirsiniz. Yalnızca belirtilen klasörde arama yapmak için glob("*.uzantı"), alt klasörleri de taramak için rglob("*.uzantı") çağırın. Örneğin *.py deseni, .py ile biten dosyaları bulur.

Tek klasörde dosyaları filtreleme​


Aşağıdaki kod, veriler klasöründeki Python dosyalarının yollarını bulur ve ekrana yazdırır. Betiği çalıştırırken klasör yolunun geçerli olduğundan emin olun; göreli yol, programı başlattığınız çalışma dizinine göre değerlendirilir.

Python:
from pathlib import Path

klasor = Path("veriler")
dosyalar = list(klasor.glob("*.py"))

for dosya in dosyalar:
    print(dosya)

Programı çalıştırdığınızda bulunan .py dosyalarının yolları satır satır görünür. Örneğin veriler/rapor.py listelenirse bu, o adla eşleşen bir yolun bulunduğunu gösterir. Hiç sonuç çıkmaması, klasörde bu desene uyan dosya olmadığı anlamına gelebilir; klasör yolunu ve dosya uzantılarını kontrol edin. glob() sonuçları belirli bir sıralama garantilemez; alfabetik liste istiyorsanız sorted(klasor.glob("*.py")) kullanın.

Alt klasörleri de tarama​


Alt dizinlerdeki eşleşmeleri de bulmak için glob() yerine rglob() kullanılır. Desenin başına **/ eklemek de glob() ile özyinelemeli arama yapar.

Python:
from pathlib import Path

klasor = Path("veriler")
dosyalar = list(klasor.rglob("*.py"))

for dosya in dosyalar:
    print(dosya)

rglob() ana klasörün altındaki dizin ağacını tarar; büyük klasörlerde bu işlem daha uzun sürebilir. Ayrıca eşleşmeler dosyalarla sınırlı değildir: aynı ad desenine uyan bir klasör de sonuçlarda yer alabilir. Yalnızca dosyaları işlemek istiyorsanız is_file() ile süzün:

Python:
dosyalar = [yol for yol in klasor.rglob("*.py") if yol.is_file()]

Birden fazla uzantı ve büyük-küçük harf​


Birden fazla uzantıyı eşleştirmek için ayrı desenleri birleştirebilirsiniz. Farklı işletim sistemlerinde harf duyarlılığı değişebileceğinden, .JPG gibi büyük harfli uzantıları da yakalamanız gerekiyorsa uzantıyı küçük harfe çevirerek karşılaştırmak daha tutarlı olur.
İhtiyaçÖrnek
Yalnızca.py dosyalarıglob(".py")
[TR][TD].jpg dosyaları[/TD][TD]glob(" .jpg") ve glob(" .png") sonuçlarını birleştirme[/TD][/TR][TR][TD]Uzantıyı harf duyarsız karşılaştırma[/TD][TD]() ile kontrol[/TD][/TR][TR][TD]Birden çok uzantı ve alt klasörler[/TD][TD]rglob(" ") sonuçlarını suffix değerine göre süzme[/TD][/TR]
Tablodaki suffix, dosya adının son uzantısını verir: foto.jpg için .jpg, arsiv.tar.gz için .gz. Birden fazla uzantıyı ve büyük-küçük harf farkını birlikte ele almak için şu örneği kullanabilirsiniz:

Python:
from pathlib import Path

klasor = Path("veriler")
gecerli_uzantilar = {".jpg", ".png"}

dosyalar = [
    yol for yol in klasor.rglob("*")
    if yol.is_file() and yol.suffix.lower() in gecerli_uzantilar
]

for dosya in dosyalar:
    print(dosya)

Burada suffix.lower() uzantıyı küçük harfe çevirir; böylece .JPG ve .jpg aynı küme değeriyle eşleşir. Çok parçalı uzantıların tamamını denetlemeniz gerekiyorsa suffix yalnız son parçayı verdiğinden suffixes özelliğini kullanın. Örneğin arsiv.tar.gz için suffixes, [".tar", ".gz"] döndürür. Uzantı eşleşmesi yalnızca dosya adını sınıflandırır; dosyanın içeriğinin gerçekten o biçimde olduğunu doğrulamaz.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic