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
Python’da bir klasörün içeriğini listelemek için en pratik yöntem 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 ifadeSonuç
Dosya ve klasörleri birlikte listelemekklasor.iterdir()Yalnızca belirtilen klasörün doğrudan içeriği
Yalnızca dosyaları listelemekif oge.is_file()Alt klasörler elenir
Belirli uzantıyı listelemekklasor.glob("*.txt")Doğrudan klasördeki eşleşen dosyalar
Alt klasörleri de taramakklasor.rglob("*")Klasör ağacındaki tüm öğeler
Tablodaki yöntemlerden sonra dosya adını veya tam yolu yazdırma tercihi değişmez. Örneğin uzantısı .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.
 

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.