పైథాన్‌లో ఫైల్ లేదా డైరెక్టరీ (ఫోల్డర్) పరిమాణాన్ని పొందడం

వ్యాపారం

పైథాన్ ప్రామాణిక లైబ్రరీ os ఉపయోగించి, మీరు ఫైల్ యొక్క పరిమాణం (సామర్థ్యం) లేదా డైరెక్టరీలో ఉన్న ఫైల్‌ల మొత్తం పరిమాణాన్ని పొందవచ్చు.

క్రింది మూడు పద్ధతులు వివరించబడ్డాయి. పొందగలిగే పరిమాణాల యూనిట్లు అన్నీ బైట్‌లు.

  • ఫైల్ పరిమాణాన్ని పొందండి: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()ని ఉపయోగించండి.

ఈ ఫంక్షన్ పైథాన్ 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()

పైథాన్ 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