- Konu sahibi
- #1
Python’da bir klasörün içeriğini listelemek için en pratik yöntem
Bu örnekte
Burada
Kullanılan yöntemleri şu şekilde ayırabilirsiniz:
Tablodaki yöntemlerden sonra dosya adını veya tam yolu yazdırma tercihi değişmez. Örneğin uzantısı
Bir klasörün içindeki alt klasörler de taranacaksa
Örneğin
Belirtilen yol mevcut değilse
pathlib içindeki Path.iterdir() kullanmaktır. Yalnızca dosyaları almak istiyorsanız her öğeyi is_file() ile süzün; alt klasörlerin içindeki dosyalar da dahil edilecekse rglob() kullanın. Aşağıdaki örnek, klasör yolunu okuyup bulunan dosyaların yollarını ekrana yazdırır.
Python:
from pathlib import Path
klasor = Path("belgeler")
dosyalar = [yol for yol in klasor.iterdir() if yol.is_file()]
for dosya in dosyalar:
print(dosya)
Bu örnekte
belgeler klasörü Python dosyasının çalıştırıldığı dizinin içinde aranır. Farklı bir konum kullanacaksanız klasör yolunu değiştirin. Windows’ta Path(r"C:\\Users\\Kullanici\\Belgeler") biçiminde ham dize kullanmak, ters bölü işaretlerinin kaçış karakteri olarak yorumlanmasını önler.Klasördeki öğeleri ve yalnızca dosyaları listelemek
iterdir() klasörde bulunan dosya ve alt klasörleri birlikte döndürür. Bu nedenle yalnızca dosyaları listelemek için is_file() koşulu gerekir:
Python:
from pathlib import Path
klasor = Path("belgeler")
for oge in klasor.iterdir():
if oge.is_file():
print(oge.name)
Burada
oge.name yalnızca dosya adını, oge ise klasör yoluyla birlikte dosyanın yolunu yazdırır. Örneğin belgeler/rapor.pdf yerine yalnızca rapor.pdf görmek istiyorsanız name özelliğini kullanın.Kullanılan yöntemleri şu şekilde ayırabilirsiniz:
| İhtiyaç | Kullanılacak ifade | Sonuç |
|---|---|---|
| Dosya ve klasörleri birlikte listelemek | klasor.iterdir() | Yalnızca belirtilen klasörün doğrudan içeriği |
| Yalnızca dosyaları listelemek | if oge.is_file() | Alt klasörler elenir |
| Belirli uzantıyı listelemek | klasor.glob("*.txt") | Doğrudan klasördeki eşleşen dosyalar |
| Alt klasörleri de taramak | klasor.rglob("*") | Klasör ağacındaki tüm öğeler |
.csv olan dosyaları almak için şu kodu kullanabilirsiniz:
Python:
from pathlib import Path
klasor = Path("veriler")
for dosya in klasor.glob("*.csv"):
if dosya.is_file():
print(dosya)
glob("*.csv") yalnızca doğrudan veriler klasöründeki CSV dosyalarını bulur. Alt klasörler de taranacaksa rglob("*.csv") yazın. Eşleşen dosya yoksa döngü hiç çalışmaz; bu durum kodun hata verdiği anlamına gelmez, yalnızca aranan klasörde o uzantıya sahip dosya bulunmadığını gösterir.Alt klasörlerdeki tüm dosyaları listelemek
Bir klasörün içindeki alt klasörler de taranacaksa
rglob("*") kullanabilirsiniz. Bu örnekte klasör olmayan öğeler elenir:
Python:
from pathlib import Path
ana_klasor = Path("proje")
dosyalar = [
yol for yol in ana_klasor.rglob("*")
if yol.is_file()
]
for dosya in dosyalar:
print(dosya)
Örneğin
proje altında src ve tests klasörleri varsa, bu kod her ikisinin içindeki dosyaları da listeler. Sonuçta yazdırılan yol, dosyanın hangi alt klasörde bulunduğunu gösterir. Büyük klasörlerde dosyaları bir listeye toplamak yerine doğrudan döngüyle işlemek bellek kullanımını azaltır:
Python:
from pathlib import Path
for dosya in Path("proje").rglob("*"):
if dosya.is_file():
print(dosya)
Klasör bulunamazsa veya erişim engellenirse
Belirtilen yol mevcut değilse
iterdir() ya da rglob() çağrısı hata verebilir. İşleme başlamadan önce yolu kontrol edebilirsiniz:
Python:
from pathlib import Path
klasor = Path("belgeler")
if not klasor.exists():
print("Klasör bulunamadı.")
elif not klasor.is_dir():
print("Belirtilen yol bir klasör değil.")
else:
for dosya in klasor.iterdir():
if dosya.is_file():
print(dosya)
exists() yolun var olduğunu, is_dir() ise yolun klasör olduğunu gösterir. Dosya listesinin boş olması klasörün boş olduğunu veya kullandığınız süzgeçle eşleşen dosya bulunmadığını gösterir; tek başına yolun yanlış olduğunu kanıtlamaz. Önce yazdırılan klasör yolunu ve uzantı kalıbını kontrol edin, ardından gerekirse mutlak yol kullanın.