- Konu sahibi
- #1
Klasördeki dosyaları uzantısına göre filtrelemek için
Aşağıdaki kod,
Programı çalıştırdığınızda bulunan
Alt dizinlerdeki eşleşmeleri de bulmak için
Birden fazla uzantıyı eşleştirmek için ayrı desenleri birleştirebilirsiniz. Farklı işletim sistemlerinde harf duyarlılığı değişebileceğinden,
[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
Burada
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") |
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.