Di Python de mezinahiya pel an peldankek (peldankê) digirin

Dikan

Bi karanîna OS-ya pirtûkxaneya standard a Python, hûn dikarin mezinahiya (kapasîteya) pelek an mezinahiya giştî ya pelên ku di pelrêçek de hene bistînin.

Sê rêbazên jêrîn têne ravekirin. Yekeyên mezinahiyên ku têne bidestxistin hemî byte ne.

  • Mezinahiya pelê bistînin:os.path.getsize()
  • Bi berhevkirina fonksiyonên jêrîn (Python 3.5 an nûtir) mezinahiya pelrêçek bistînin:os.scandir()
  • Fonksiyonên jêrîn tevlihev bikin da ku mezinahiya pelrêçê bistînin (Python 3.4 û berê):os.listdir()

Mezinahiya pelê bistînin:os.path.getsize()

Mezinahiya (kapasîteya) pelê bi os.path.getsize() dikare were bidestxistin.

Riya pelê ku hûn dixwazin mezinahiya wê wekî arguman bistînin bidin.

import os

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

Mezinahiya pelrêçek (peldankê) bistînin:os.scandir()

Ji bo hesabkirina mezinahiya giştî ya pelên ku di peldankekê de hene, os.scandir() bikar bînin.

Ev fonksiyon di Python 3.5 de hate zêdekirin, ji ber vê yekê guhertoyên berê os.listdir() bikar tînin. Mînaka os.listdir() paşê tê şirove kirin.

Fonksiyonek wekî jêrîn diyar bikin.

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() îteratorek os.DirEntry vedigerîne.

Tişta DirEntry, rêbazên is_file() û is_dir() bikar bînin da ku diyar bikin ka ew pel an pelrêçek e. Ger ew pelek be, mezinahî ji taybetmendiya st_size ya objekta stat_result tê wergirtin. Di doza pelrêçek de, ji vê fonksiyonê rekursîv tê gotin ku hemî mezinahiyê lê zêde bike û mezinahiya tevahî vegerîne.

Wekî din, ji hêla xwerû ve, is_file() ji bo girêdanên sembolîk ên pelan TRUE vedigerîne. Di heman demê de, is_dir() ji bo girêdanên sembolîk ên pelrêçan rast vedigere. Heke hûn dixwazin guh nedin girêdanên sembolîk, argumana follow_symlinks ya is_file() û is_dir() li ser xelet bicîh bikin.

Di heman demê de, heke hûn ne hewce ne ku hûn li jêrderhêneran bigerin, hûn dikarin tenê beşa jêrîn jêbirin.

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

Heke riya pelê wekî arguman were derbas kirin fonksiyona jorîn dê têk biçe. Ger ji we re fonksiyonek hewce bike ku mezinahiya pel an pelrêçek vegere, hûn dikarin jêrîn binivîsin.

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

Mezinahiya pelrêçek (peldankê) bistînin:os.listdir()

Di Python 3.4 an berê de os.scandir() tune, ji ber vê yekê os.listdir() bikar bînin.

Fonksiyonek wekî jêrîn diyar bikin.

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

Fikra bingehîn jî wek os.scandir().

Tiştê ku bi os.listdir() re dikare were bidestxistin, navnîşek navên pelan (navên pelrêça) ye. Navê her pelê an navê pelrêçê bi riya pelrêça dêûbavê bi os.path.join() ve tê girêdan da ku riya tevahî çêbikin.

Ger mebest girêdanek sembolîk be, os.path.isfile() û os.path.isdir() dê hebûnê dadbar bikin. Ji ber vê yekê, heke hûn dixwazin guh nedin girêdanên sembolîk, bi os.path.islink(), ku ji bo girêdanên sembolîk rast vedigere, daraza şertî bikar bînin.

Mîna ku di os.scandir() de, heke hûn ne hewce ne ku hûn li jêrderhêneran bigerin, tenê beşa jêrîn jêbirin.

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

Heke riya pelê wekî arguman were derbas kirin fonksiyona jorîn dê têk biçe. Ger ji we re fonksiyonek hewce bike ku mezinahiya pel an pelrêçek vegere, hûn dikarin jêrîn binivîsin.

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