CodeBlanks Logo Icon CodeBlanks

glob ve rglob

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

main.py
# 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

main.py
# 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

Soru
for py_file in p.____("*.py"):
    print(py_file.name)
Cevap
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

Orta seviye bölümündeki tüm dersler