Získanie veľkosti súboru alebo adresára (priečinka) v jazyku Python

obchodné

Pomocou štandardnej knižnice Python os môžete zistiť veľkosť (kapacitu) súboru alebo celkovú veľkosť súborov obsiahnutých v adresári.

Vysvetľujú sa tieto tri metódy. Jednotky veľkostí, ktoré možno získať, sú všetky bajty.

  • Získanie veľkosti súboru:os.path.getsize()
  • Zistite veľkosť adresára kombináciou nasledujúcich funkcií (Python 3.5 alebo novší):os.scandir()
  • Kombináciou nasledujúcich funkcií získate veľkosť adresára (Python 3.4 a staršie):os.listdir()

Získanie veľkosti súboru: os.path.getsize()

Veľkosť (kapacitu) súboru možno zistiť pomocou os.path.getsize().

Ako argument zadajte cestu k súboru, ktorého veľkosť chcete získať.

import os

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

Získanie veľkosti adresára (priečinka): os.scandir()

Ak chcete vypočítať celkovú veľkosť súborov obsiahnutých v adresári (priečinku), použite os.scandir().

Táto funkcia bola pridaná v Pythone 3.5, takže staršie verzie používajú os.listdir(). príklad os.listdir() je popísaný neskôr.

Definujte funkciu takto.

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() vráti iterátor objektu os.DirEntry.

DirEntry, použite metódy is_file() a is_dir() na určenie, či ide o súbor alebo adresár. Ak ide o súbor, veľkosť sa získa z atribútu st_size objektu stat_result. V prípade adresára sa táto funkcia volá rekurzívne, aby sa sčítali všetky veľkosti a vrátila sa celková veľkosť.

Okrem toho funkcia is_file() v predvolenom nastavení vracia TRUE pre symbolické odkazy na súbory. Funkcia is_dir() tiež vracia true pre symbolické odkazy na adresáre. Ak chcete ignorovať symbolické odkazy, nastavte argument follow_symlinks funkcií is_file() a is_dir() na false.

Ak nepotrebujete prechádzať podadresáre, môžete jednoducho odstrániť nasledujúcu časť.

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

Vyššie uvedená funkcia zlyhá, ak je ako argument odovzdaná cesta k súboru. Ak potrebujete funkciu na vrátenie veľkosti súboru alebo adresára, môžete napísať nasledujúce.

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

Získanie veľkosti adresára (priečinka): os.listdir()

V jazyku Python 3.4 a starších neexistuje funkcia os.scandir(), preto použite funkciu os.listdir().

Definujte funkciu takto.

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

Základná myšlienka je rovnaká ako v prípade funkcie os.scandir().

Pomocou funkcie os.listdir() možno získať zoznam názvov súborov (názvov adresárov). Každý názov súboru alebo adresára sa spojí s cestou nadradeného adresára pomocou funkcie os.path.join(), čím sa vytvorí úplná cesta.

Ak je cieľom symbolický odkaz, os.path.isfile() a os.path.isdir() posúdia entitu. Ak teda chcete ignorovať symbolické odkazy, použite podmienené posudzovanie v kombinácii s os.path.islink(), ktoré pre symbolické odkazy vracia true.

Podobne ako v prípade funkcie os.scandir(), ak nepotrebujete prechádzať podadresáre, stačí odstrániť nasledujúcu časť.

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

Vyššie uvedená funkcia zlyhá, ak je ako argument odovzdaná cesta k súboru. Ak potrebujete funkciu na vrátenie veľkosti súboru alebo adresára, môžete napísať nasledujúce.

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