الحصول على حجم ملف أو دليل (مجلد) في بايثون

اعمال

باستخدام نظام تشغيل مكتبة Python القياسي ، يمكنك الحصول على حجم (سعة) ملف أو الحجم الإجمالي للملفات الموجودة في الدليل.

يتم شرح الطرق الثلاث التالية. وحدات الأحجام التي يمكن الحصول عليها كلها بايت.

  • احصل على حجم الملف:os.path.getsize()
  • احصل على حجم الدليل من خلال الجمع بين الوظائف التالية (Python 3.5 أو أحدث):os.scandir()
  • اجمع بين الوظائف التالية للحصول على حجم الدليل (Python 3.4 والإصدارات الأقدم):os.listdir()

احصل على حجم الملف:os.path.getsize()

يمكن الحصول على حجم (سعة) الملف باستخدام os.path.getsize ().

أعط مسار الملف الذي تريد الحصول على حجمه كوسيطة.

import os

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

الحصول على حجم المجلد (المجلد):os.scandir()

لحساب الحجم الإجمالي للملفات الموجودة في مجلد (مجلد) ، استخدم () os.scandir.

تمت إضافة هذه الوظيفة في Python 3.5 ، لذلك تستخدم الإصدارات السابقة os.listdir (). os.listdir () يتم وصف المثال لاحقًا.

حدد وظيفة على النحو التالي.

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.

كائن DirEntry ، استخدم الأسلوبين is_file () و is_dir () لتحديد ما إذا كان ملفًا أو دليلًا. إذا كان ملفًا ، يتم الحصول على الحجم من سمة st_size للكائن stat_result. في حالة وجود دليل ، تسمى هذه الوظيفة بشكل متكرر لجمع جميع الأحجام وإرجاع الحجم الإجمالي.

بالإضافة إلى ذلك ، بشكل افتراضي ، تقوم is_file () بإرجاع TRUE للروابط الرمزية للملفات. أيضًا ، تُرجع الدالة is_dir () القيمة “true” للروابط الرمزية إلى الدلائل. إذا كنت تريد تجاهل الروابط الرمزية ، فقم بتعيين الوسيطة follow_symlinks لـ is_file () و is_dir () إلى false.

أيضًا ، إذا لم تكن بحاجة إلى اجتياز الدلائل الفرعية ، فيمكنك فقط حذف الجزء التالي.

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

ستفشل الوظيفة أعلاه إذا تم تمرير مسار الملف كوسيطة. إذا كنت بحاجة إلى وظيفة لإرجاع حجم ملف أو دليل ، يمكنك كتابة ما يلي.

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

الحصول على حجم المجلد (المجلد):os.listdir()

لا يوجد os.scandir () في Python 3.4 أو أقدم ، لذا استخدم os.listdir ().

حدد وظيفة على النحو التالي.

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

الفكرة الأساسية هي نفسها كما في حالة os.scandir ().

ما يمكن الحصول عليه باستخدام os.listdir () هو قائمة بأسماء الملفات (أسماء الدلائل). يتم ربط كل اسم ملف أو اسم دليل بمسار الدليل الأصلي باستخدام os.path.join () لإنشاء المسار الكامل.

إذا كان الهدف رابطًا رمزيًا ، فإن os.path.isfile () و os.path.isdir () سيحكمان على الكيان. لذلك ، إذا كنت تريد تجاهل الروابط الرمزية ، فاستخدم الحكم الشرطي بالاشتراك مع os.path.islink () ، والذي يعود صحيحًا للروابط الرمزية.

كما في حالة os.scandir () ، إذا لم تكن بحاجة إلى اجتياز الدلائل الفرعية ، فقم فقط بحذف الجزء التالي.

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

ستفشل الوظيفة أعلاه إذا تم تمرير مسار الملف كوسيطة. إذا كنت بحاجة إلى وظيفة لإرجاع حجم ملف أو دليل ، يمكنك كتابة ما يلي.

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