Marrja e madhësisë së një skedari ose drejtorie (dosje) në Python

biznes

Duke përdorur sistemin operativ standard të bibliotekës Python, ju mund të merrni madhësinë (kapacitetin) e një skedari ose madhësinë totale të skedarëve të përfshirë në një direktori.

Tre metodat e mëposhtme janë shpjeguar. Njësitë e madhësive që mund të merren janë të gjitha bajt.

  • Merrni madhësinë e skedarit:os.path.getsize()
  • Merrni madhësinë e një drejtorie duke kombinuar funksionet e mëposhtme (Python 3.5 ose më vonë):os.scandir()
  • Kombinoni funksionet e mëposhtme për të marrë madhësinë e drejtorisë (Python 3.4 dhe më herët):os.listdir()

Merrni madhësinë e skedarit:os.path.getsize()

Madhësia (kapaciteti) i skedarit mund të merret me os.path.getsize().

Jepni shtegun e skedarit, madhësia e të cilit dëshironi të merrni si argument.

import os

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

Merrni madhësinë e një drejtorie (dosje):os.scandir()

Për të llogaritur madhësinë totale të skedarëve të përfshirë në një direktori (dosje), përdorni os.scandir().

Ky funksion u shtua në Python 3.5, kështu që versionet e mëparshme përdorin os.listdir(). Shembulli os.listdir() përshkruhet më vonë.

Përcaktoni një funksion si më poshtë.

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() kthen një përsëritës të objektit os.DirEntry.

Objekti DirEntry, përdorni metodat is_file() dhe is_dir() për të përcaktuar nëse është një skedar apo një drejtori. Nëse është një skedar, madhësia merret nga atributi st_size i objektit stat_result. Në rastin e një drejtorie, ky funksion thirret në mënyrë rekursive për të mbledhur të gjitha madhësitë dhe për të kthyer madhësinë totale.

Përveç kësaj, si parazgjedhje, is_file() kthen TRUE për lidhjet simbolike me skedarët. Gjithashtu, is_dir() kthen true për lidhjet simbolike të drejtorive. Nëse dëshironi të shpërfillni lidhjet simbolike, vendosni argumentin follow_symlinks të is_file() dhe is_dir() në false.

Gjithashtu, nëse nuk keni nevojë të kaloni nëpër nëndrejtori, thjesht mund të fshini pjesën e mëposhtme.

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

Funksioni i mësipërm do të dështojë nëse shtegu i skedarit kalohet si argument. Nëse ju nevojitet një funksion për të kthyer madhësinë e një skedari ose një drejtorie, mund të shkruani sa më poshtë.

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

Merrni madhësinë e një drejtorie (dosje):os.listdir()

Nuk ka os.scandir() në Python 3.4 ose më herët, prandaj përdorni os.listdir().

Përcaktoni një funksion si më poshtë.

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

Ideja bazë është e njëjtë si në rastin e os.scandir().

Ajo që mund të merret me os.listdir() është një listë me emrat e skedarëve (emrat e drejtorive). Çdo emër skedari ose emër drejtorie bashkohet me shtegun e drejtorisë prind me os.path.join() për të krijuar shtegun e plotë.

Nëse objektivi është një lidhje simbolike, os.path.isfile() dhe os.path.isdir() do të gjykojnë entitetin. Pra, nëse doni të shpërfillni lidhjet simbolike, përdorni gjykimin e kushtëzuar në kombinim me os.path.islink(), i cili kthehet i vërtetë për lidhjet simbolike.

Ashtu si në rastin e os.scandir(), nëse nuk keni nevojë të kaloni nëpër nëndrejtori, thjesht fshini pjesën e mëposhtme.

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

Funksioni i mësipërm do të dështojë nëse shtegu i skedarit kalohet si argument. Nëse ju nevojitet një funksion për të kthyer madhësinë e një skedari ose një drejtorie, mund të shkruani sa më poshtë.

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