Python-da faylın və ya qovluğun (qovluğun) ölçüsünü əldə etmək

Biznes

Python standart kitabxana əməliyyat sistemindən istifadə edərək siz faylın ölçüsünü (tutumunu) və ya kataloqda olan faylların ümumi ölçüsünü əldə edə bilərsiniz.

Aşağıdakı üç üsul izah edilir. Əldə edilə bilən ölçü vahidləri hamısı baytdır.

  • Faylın ölçüsünü əldə edin:os.path.getsize()
  • Aşağıdakı funksiyaları birləşdirərək kataloqun ölçüsünü əldə edin (Python 3.5 və ya daha sonra):os.scandir()
  • Kataloqun ölçüsünü əldə etmək üçün aşağıdakı funksiyaları birləşdirin (Python 3.4 və əvvəllər):os.listdir()

Faylın ölçüsünü əldə edin:os.path.getsize()

Faylın ölçüsünü (tutumunu) os.path.getsize() ilə əldə etmək olar.

Arqument kimi ölçüsünü almaq istədiyiniz faylın yolunu göstərin.

import os

print(os.path.getsize('data/src/lena_square.png'))
# 473831

Bir kataloqun (qovluğun) ölçüsünü əldə edin:os.scandir()

Kataloqda (qovluqda) olan faylların ümumi ölçüsünü hesablamaq üçün os.scandir() istifadə edin.

Bu funksiya Python 3.5-də əlavə edilmişdir, ona görə də əvvəlki versiyalarda os.listdir() istifadə olunur. os.listdir() nümunəsi daha sonra təsvir edilmişdir.

Aşağıdakı kimi funksiyanı təyin edin.

def get_dir_size(path='.'):
    total = 0
    with os.scandir(path) as it:
        for entry in it:
            if entry.is_file():
                total += entry.stat().st_size
            elif entry.is_dir():
                total += get_dir_size(entry.path)
    return total

print(get_dir_size('data/src'))
# 56130856

os.scandir() os.DirEntry obyektinin iteratorunu qaytarır.

DirEntry obyektinin fayl və ya qovluq olduğunu müəyyən etmək üçün is_file() və is_dir() üsullarından istifadə edin. Əgər bu fayldırsa, ölçü stat_result obyektinin st_size atributundan alınır. Kataloq vəziyyətində bu funksiya bütün ölçüləri toplamaq və ümumi ölçüsü qaytarmaq üçün rekursiv çağırılır.

Bundan əlavə, default olaraq is_file() fayllara simvolik keçidlər üçün TRUE qaytarır. Həmçinin, is_dir() qovluqlara simvolik keçidlər üçün doğru qaytarır. Əgər simvolik bağlantılara məhəl qoymamaq istəyirsinizsə, is_file() və is_dir() funksiyalarının follow_symlinks arqumentini false olaraq təyin edin.

Həmçinin, əgər alt kataloqları keçmək lazım deyilsə, sadəcə aşağıdakı hissəni silə bilərsiniz.

            elif entry.is_dir():
                total += get_dir_size(entry.path)

Faylın yolu arqument kimi ötürülürsə, yuxarıdakı funksiya uğursuz olacaq. Əgər faylın və ya kataloqun ölçüsünü qaytarmaq üçün funksiyaya ehtiyacınız varsa, aşağıdakıları yaza bilərsiniz.

def get_size(path='.'):
    if os.path.isfile(path):
        return os.path.getsize(path)
    elif os.path.isdir(path):
        return get_dir_size(path)

print(get_size('data/src'))
# 56130856

print(get_size('data/src/lena_square.png'))
# 473831

Bir kataloqun (qovluğun) ölçüsünü əldə edin:os.listdir()

Python 3.4 və ya daha əvvəlki versiyalarda os.scandir() yoxdur, ona görə də os.listdir() istifadə edin.

Aşağıdakı kimi funksiyanı təyin edin.

def get_dir_size_old(path='.'):
    total = 0
    for p in os.listdir(path):
        full_path = os.path.join(path, p)
        if os.path.isfile(full_path):
            total += os.path.getsize(full_path)
        elif os.path.isdir(full_path):
            total += get_dir_size_old(full_path)
    return total

print(get_dir_size_old('data/src'))
# 56130856

Əsas ideya os.scandir() işində olduğu kimidir.

os.listdir() ilə əldə edilə bilən şey fayl adlarının (kataloq adlarının) siyahısıdır. Tam yolu yaratmaq üçün hər bir fayl adı və ya kataloq adı os.path.join() ilə əsas kataloqun yolu ilə birləşdirilir.

Hədəf simvolik bir keçiddirsə, os.path.isfile() və os.path.isdir() obyekti mühakimə edəcək. Beləliklə, simvolik bağlantılara məhəl qoymamaq istəyirsinizsə, simvolik bağlantılar üçün doğru olan os.path.islink() ilə birlikdə şərti mülahizədən istifadə edin.

os.scandir() vəziyyətində olduğu kimi, əgər alt kataloqları keçməyə ehtiyac yoxdursa, sadəcə aşağıdakı hissəni silin.

        elif os.path.isdir(full_path):
            total += get_dir_size_old(full_path)

Faylın yolu arqument kimi ötürülürsə, yuxarıdakı funksiya uğursuz olacaq. Əgər faylın və ya kataloqun ölçüsünü qaytarmaq üçün funksiyaya ehtiyacınız varsa, aşağıdakıları yaza bilərsiniz.

def get_size_old(path='.'):
    if os.path.isfile(path):
        return os.path.getsize(path)
    elif os.path.isdir(path):
        return get_dir_size_old(path)

print(get_size_old('data/src'))
# 56130856

print(get_size_old('data/src/lena_square.png'))
# 473831
Copied title and URL