- Konu sahibi
- #1
Bir klasördeki dosyaların toplam boyutunu hesaplamak için Python’da
Aşağıdaki örnek, belirtilen klasörün yalnızca doğrudan içindeki dosyaları toplar. Alt klasörler hesaba katılmaz.
Bu kodda
Bir klasörün bütün alt klasörlerini taramak istiyorsanız
Bu sürüm,
İki yöntemin farkı seçim yaparken önemlidir:
Boyutu otomatik olarak bayt, KB, MB veya GB biçimine dönüştürmek için küçük bir yardımcı işlev kullanabilirsiniz:
Örneğin klasördeki dosyaların toplamı 5.25 MB ise çıktı yaklaşık olarak
Klasörde okunamayan, silinmiş veya erişim izni olmayan bir dosya varsa
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.
Toplam yerine hangi dosyanın ne kadar yer kapladığını görmek için dosya yolunu ve boyutunu birlikte yazdırabilirsiniz:
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.
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ım | Yöntem | Hesaba katılanlar |
|---|---|---|
| Yalnızca seçilen klasör | iterdir() | Klasörün doğrudan içindeki dosyalar |
| Klasör ve alt klasörleri | rglob("*") | 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.