glob ve rglob
- Python kursu
- Orta seviye
- Ders 80/116
- 5 dk
glob ve rglob ile desen aramayı öğrenirsin.
glob ile dosya bulma
Bir klasördeki dosyaları desenle aramak için p.glob("*.txt") metodunu kullanırsın. Dönen değer bir üreteçtir (generator); liste olarak almak için list(p.glob("*.txt")) yazarsın. Desen * ile her şeyi, ? ile tek bir karakteri eşler.
rglob metodu ise alt klasörlere de iner; özyinelemeli arama yapar. Örneğin p.rglob("*.py") çağrısı p klasörü ve tüm alt klasörlerinde .py uzantılı dosyaları arar. Büyük projelerde useful bir araçtır.
Uygulama glob ile dosyaları bul
Önce from pathlib import Path satırını ekle. d = Path("test_dizini") ile bir yol oluştur ve d.mkdir() ile klasörü yap. Üç dosya oluştur: (d / "a.txt").write_text("x", encoding="utf-8"), (d / "b.txt").write_text("y", encoding="utf-8") ve (d / "c.md").write_text("z", encoding="utf-8"). Sonra results = list(d.glob("*.txt")) ile txt dosyalarını bul ve print(len(results)) ile sayılarını yazdır.
Başlangıç kodu
# Path sınıfını içe aktar
# d klasörünü oluştur
# üç dosya yaz (iki txt, bir md)
# glob ile txt dosyalarını bul, sayıyı yazdırÖrnek çözüm
# Path sınıfını içe aktar
from pathlib import Path
# d klasörünü oluştur
d = Path("test_dizini")
d.mkdir()
# üç dosya yaz (iki txt, bir md)
(d / "a.txt").write_text("x", encoding="utf-8")
(d / "b.txt").write_text("y", encoding="utf-8")
(d / "c.md").write_text("z", encoding="utf-8")
# glob ile txt dosyalarını bul, sayıyı yazdır
results = list(d.glob("*.txt"))
print(len(results))Beklenen çıktı
2
Desen sözdizimi
glob desenleri basit sözdizimine sahiptir. * sıfır veya daha çok karakteri, ? tam olarak bir karakteri eşler. [abc] belirli karakterlerden birini, [0-9] bir rakamı eşler. Örneğin "file?.txt" deseni file1.txt ile eşleşir ama file12.txt ile eşleşmez.
Daha karmaşık desenler için re modülü kullanılır; glob desenleri regex değildir. Bu sınırlama bilinçlidir; desenleri basit ve öngörülebilir tutar.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 glob ile rglob arasındaki fark nedir?
- glob tek klasörde, rglob alt klasörlerle beraber arar Doğru cevap
- glob yalnızca dosya, rglob yalnızca klasör bulur
- glob dize, rglob liste döndürür
- İkisi tamamen aynıdır
Açıklama: Seçim yanlış. Doğru cevap: glob tek klasörde, rglob alt klasörlerle beraber arar.
2 rglob çağrısını tamamla
for py_file in p.____("*.py"):
print(py_file.name)
for py_file in p.rglob("*.py"):
print(py_file.name)
Açıklama: rglob alt klasörlere de iner.
3 Desen sembollerini eşleştir
| Kavram | Anlamı |
|---|---|
* |
Sıfır veya daha çok karakter |
? |
Tek karakter |
[abc] |
Listeden bir karakter |
rglob |
Alt klasörlerle arama |