Mario

WFN Üye
Konular
581
Mesajlar
581
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Zonguldak
Web Sitesi
Var
Alanı
Google Optimiz.
1/1
Konu sahibi
Bir klasördeki dosyaların toplam boyutunu hesaplamak için Python’da pathlib kullanabilirsiniz. Yalnızca klasörün içindeki dosyaları toplamak istiyorsanız iterdir(), alt klasörleri de hesaba katmak istiyorsanız rglob() kullanılır. Boyutlar bayt cinsinden döner; sonucu KB, MB veya GB olarak göstermek için toplamı uygun katsayıya bölmeniz yeterlidir.

Klasördeki dosyaların toplam boyutunu hesaplama​


Aşağıdaki örnek, belirtilen klasörün yalnızca doğrudan içindeki dosyaları toplar. Alt klasörler hesaba katılmaz.

Python:
from pathlib import Path

klasor = Path("ornek_klasor")

toplam_bayt = sum(
    dosya.stat().st_size
    for dosya in klasor.iterdir()
    if dosya.is_file()
)

print(f"Toplam: {toplam_bayt} bayt")
print(f"Toplam: {toplam_bayt / 1024:.2f} KB")
print(f"Toplam: {toplam_bayt / (1024 ** 2):.2f} MB")

Bu kodda klasor değişkeni hesaplanacak dizini belirtir. Klasör Python dosyanızla aynı konumdaysa yalnızca klasör adını yazabilirsiniz. Başka bir konum için Windows’ta ham dizge kullanmak veya eğik çizgileri çift yazmak gerekir:

Python:
from pathlib import Path

klasor = Path(r"C:\Veriler\Belgeler")
# veya
# klasor = Path("C:/Veriler/Belgeler")

is_file() yalnızca gerçek dosyaları seçer; alt klasörleri toplamaya katmaz. stat().st_size ise dosyanın boyutunu bayt olarak verir. Örneğin sonuç 1048576 ise bu, 1024 tabanında 1 MB’a karşılık gelir.

Alt klasörlerdeki dosyaları da dahil etme​


Bir klasörün bütün alt klasörlerini taramak istiyorsanız iterdir() yerine rglob("*") kullanın:

Python:
from pathlib import Path

klasor = Path("ornek_klasor")

toplam_bayt = sum(
    dosya.stat().st_size
    for dosya in klasor.rglob("*")
    if dosya.is_file()
)

print(f"Toplam: {toplam_bayt} bayt")
print(f"Toplam: {toplam_bayt / (1024 ** 2):.2f} MB")

Bu sürüm, ornek_klasor içindeki dosyaları ve onun altındaki tüm klasörlerde bulunan dosyaları toplar. Hesaplama tamamlandığında ekrana yazdırılan değer, seçilen klasör ağacındaki dosyaların toplam mantıksal boyutudur.

İki yöntemin farkı seçim yaparken önemlidir:
KullanımYöntemHesaba katılanlar
Yalnızca seçilen klasöriterdir()Klasörün doğrudan içindeki dosyalar
Klasör ve alt klasörlerirglob("*")Taranan dizin ağacındaki tüm dosyalar
rglob() kullanırken sembolik bağlantılar, erişim izinleri veya aynı dosyaya farklı yollarla ulaşılması gibi özel durumlar toplamın beklentinizden farklı görünmesine neden olabilir. Normal bir klasör yapısında ise dosya bazında toplama yapmak için yeterlidir.

Sonucu okunabilir biçimde yazdırma​


Boyutu otomatik olarak bayt, KB, MB veya GB biçimine dönüştürmek için küçük bir yardımcı işlev kullanabilirsiniz:

Python:
def okunabilir_boyut(bayt):
    birimler = ["B", "KB", "MB", "GB", "TB"]
    boyut = float(bayt)

    for birim in birimler:
        if boyut < 1024 or birim == birimler[-1]:
            return f"{boyut:.2f} {birim}"
        boyut /= 1024


from pathlib import Path

klasor = Path("ornek_klasor")
toplam_bayt = sum(
    dosya.stat().st_size
    for dosya in klasor.rglob("*")
    if dosya.is_file()
)

print(f"Toplam dosya boyutu: {okunabilir_boyut(toplam_bayt)}")

Örneğin klasördeki dosyaların toplamı 5.25 MB ise çıktı yaklaşık olarak Toplam dosya boyutu: 5.25 MB şeklinde olur. Buradaki dönüşüm 1024 tabanını kullanır. İşletim sistemindeki bazı depolama araçları ise 1000 tabanını kullanabilir; bu nedenle Python çıktısı ile başka bir aracın gösterdiği değer arasında küçük farklar görülebilir.

Dosya erişim hatalarını yönetme​


Klasörde okunamayan, silinmiş veya erişim izni olmayan bir dosya varsa stat() çağrısı hata verebilir. Hesaplamanın tek bir dosya nedeniyle durmasını istemiyorsanız dosyaları döngü içinde kontrol ederek hatalı dosyaları atlayabilirsiniz:

Python:
from pathlib import Path

klasor = Path("ornek_klasor")
toplam_bayt = 0

for dosya in klasor.rglob("*"):
    if not dosya.is_file():
        continue

    try:
        toplam_bayt += dosya.stat().st_size
    except OSError as hata:
        print(f"Okunamadı: {dosya} - {hata}")

print(f"Hesaplanabilen toplam: {toplam_bayt / (1024 ** 2):.2f} MB")

Bu durumda ekrana yazılan değer, erişilebilen dosyaların toplamıdır. Hata alan dosyaların boyutu hesaba katılmadığı için sonuç klasörün gerçek toplamını tam olarak temsil etmeyebilir. Kesin toplam gerekiyorsa önce hata mesajında adı görünen dosyanın varlığını ve izinlerini kontrol etmeniz gerekir.

Tek tek dosyaların boyutunu görmek​


Toplam yerine hangi dosyanın ne kadar yer kapladığını görmek için dosya yolunu ve boyutunu birlikte yazdırabilirsiniz:

Python:
from pathlib import Path

klasor = Path("ornek_klasor")

for dosya in klasor.rglob("*"):
    if dosya.is_file():
        boyut = dosya.stat().st_size
        print(f"{dosya}: {boyut / (1024 ** 2):.2f} MB")

Bu çıktı, toplam boyutun hangi dosyalardan oluştuğunu anlamanızı sağlar. Bir klasör beklenenden büyük görünüyorsa önce bu listeyi inceleyerek büyük dosyaları belirleyebilir, ardından gereksiz dosyaları silme veya taşıma kararını dosyanın kullanım amacını kontrol ettikten sonra verebilirsiniz.

Sık sorulan sorular​

Alt klasörleri hesaba katmadan nasıl hesaplama yapılır?​

klasor.iterdir() kullanıp yalnızca dosya.is_file() sonucu doğru olan öğeleri toplamalısınız. Böylece seçilen klasörün doğrudan içindeki dosyalar hesaplanır; alt klasörlerin içeriği dahil edilmez.

Alt klasörlerle birlikte toplam boyut nasıl bulunur?​

klasor.rglob("*") kullanmalısınız. Bu yöntem, seçilen klasörün altındaki dizinleri de tarar. Yine yalnızca dosyaları toplamak için is_file() kontrolünü koruyun.

Python neden işletim sistemindeki klasör boyutundan farklı sonuç gösterebilir?​

Python dosyaların mantıksal boyutlarını toplar. İşletim sistemi ise ayrılan disk alanını, dosya sistemi kümelerini, sıkıştırmayı veya özel dosyaları farklı biçimde gösterebilir. Bu nedenle iki değer aynı olmak zorunda değildir.

Dosya boyutunu GB olarak nasıl yazdırırım?​

Toplam baytı 1024 ** 3 değerine bölün:

Python:
print(f"{toplam_bayt / (1024 ** 3):.2f} GB")

Bu hesaplama 1024 tabanını kullanır ve sonucu ikili ölçüm yaklaşımına göre gösterir.
 

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.
Robotlar:
  • Anthropic