पायथन में फ़ाइल या निर्देशिका (फ़ोल्डर) का आकार प्राप्त करना

व्यापार

पायथन मानक पुस्तकालय ओएस का उपयोग करके, आप किसी फ़ाइल का आकार (क्षमता) या निर्देशिका में निहित फ़ाइलों का कुल आकार प्राप्त कर सकते हैं।

निम्नलिखित तीन विधियों की व्याख्या की गई है। प्राप्त किए जा सकने वाले आकारों की इकाइयाँ सभी बाइट्स हैं।

  • फ़ाइल का आकार प्राप्त करें:os.path.getsize()
  • निम्नलिखित कार्यों को मिलाकर निर्देशिका का आकार प्राप्त करें (पायथन 3.5 या बाद में):os.scandir()
  • निर्देशिका का आकार प्राप्त करने के लिए निम्नलिखित कार्यों को मिलाएं (पायथन 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() विधियों का उपयोग यह निर्धारित करने के लिए करें कि यह एक फ़ाइल या निर्देशिका है या नहीं। यदि यह एक फ़ाइल है, तो आकार stat_result ऑब्जेक्ट की st_size विशेषता से प्राप्त किया जाता है। एक निर्देशिका के मामले में, इस फ़ंक्शन को सभी आकारों को जोड़ने और कुल आकार वापस करने के लिए पुनरावर्ती रूप से कहा जाता है।

इसके अलावा, डिफ़ॉल्ट रूप से, is_file() फाइलों के प्रतीकात्मक लिंक के लिए TRUE देता है। साथ ही, is_dir() निर्देशिकाओं के प्रतीकात्मक लिंक के लिए सही है। यदि आप प्रतीकात्मक लिंक को अनदेखा करना चाहते हैं, तो is_file() और is_dir() के follow_symlinks तर्क को गलत पर सेट करें।

साथ ही, यदि आपको उपनिर्देशिकाओं को पार करने की आवश्यकता नहीं है, तो आप केवल निम्नलिखित भाग को हटा सकते हैं।

            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()

Python 3.4 या इससे पहले के संस्करण में कोई os.scandir() नहीं है, इसलिए 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