Python मा फाइल वा डाइरेक्टरी (फोल्डर) को आकार प्राप्त गर्दै

व्यापार

पाइथन मानक पुस्तकालय ओएस प्रयोग गरेर, तपाईंले फाइलको साइज (क्षमता) वा डाइरेक्टरीमा रहेका फाइलहरूको कुल साइज प्राप्त गर्न सक्नुहुन्छ।

निम्न तीन विधिहरू व्याख्या गरिएको छ। प्राप्त गर्न सकिने आकारका एकाइहरू सबै बाइटहरू हुन्।

  • फाइलको साइज प्राप्त गर्नुहोस्:os.path.getsize()
  • निम्न प्रकार्यहरू संयोजन गरेर डाइरेक्टरीको आकार प्राप्त गर्नुहोस् (पाइथन 3.5 वा पछिको):os.scandir()
  • डाइरेक्टरीको साइज प्राप्त गर्न निम्न प्रकार्यहरू मिलाउनुहोस् (पाइथन ३.४ र अघिल्लो):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 तर्कलाई 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()

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
Copied title and URL