Tiedoston tai hakemiston (kansion) koon saaminen Pythonissa

liiketoiminta

Pythonin standardikirjaston os avulla voit saada tiedoston koon (kapasiteetin) tai hakemiston sisältämien tiedostojen kokonaiskoon.

Seuraavat kolme menetelmää selitetään. Saatavien kokojen yksiköt ovat tavuja.

  • Tiedoston koon hakeminen:os.path.getsize()
  • Hae hakemiston koko yhdistämällä seuraavat funktiot (Python 3.5 tai uudempi):os.scandir()
  • Yhdistä seuraavat funktiot saadaksesi hakemiston koon (Python 3.4 ja aikaisemmat).:os.listdir()

Tiedoston koon hakeminen: os.path.getsize()

Tiedoston koko (kapasiteetti) saadaan komennolla os.path.getsize().

Anna argumenttina sen tiedoston polku, jonka koon haluat saada.

import os

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

Hakemiston (kansion) koon hakeminen: os.scandir()

Voit laskea hakemiston (kansion) sisältämien tiedostojen kokonaiskoon käyttämällä os.scandir().

Tämä funktio lisättiin Python 3.5:ssä, joten aiemmissa versioissa käytetään os.listdir()-funktiota. os.listdir()-esimerkki kuvataan myöhemmin.

Määrittele funktio seuraavasti.

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() palauttaa os.DirEntry-olion iteraattorin.

DirEntry-olion, käytä is_file()- ja is_dir()-metodeja määrittääksesi, onko kyseessä tiedosto vai hakemisto. Jos kyseessä on tiedosto, koko saadaan stat_result-olion st_size-attribuutista. Jos kyseessä on hakemisto, tätä funktiota kutsutaan rekursiivisesti kaikkien kokojen laskemiseksi yhteen ja kokonaiskoon palauttamiseksi.

Lisäksi is_file() palauttaa oletusarvoisesti TRUE-arvon tiedostojen symbolisille linkeille. Myös is_dir() palauttaa true, kun kyseessä ovat symboliset linkit hakemistoihin. Jos haluat jättää symboliset linkit huomiotta, aseta is_file()- ja is_dir()-ohjelmien follow_symlinks-argumentti arvoon false.

Jos sinun ei tarvitse käydä läpi alihakemistoja, voit myös poistaa seuraavan osan.

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

Yllä oleva funktio epäonnistuu, jos tiedoston polku annetaan argumenttina. Jos tarvitset funktiota, joka palauttaa tiedoston tai hakemiston koon, voit kirjoittaa seuraavasti.

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

Hakemiston (kansion) koon hakeminen: os.listdir()

Python 3.4:ssä tai aikaisemmissa versioissa ei ole os.scandir()-ohjelmaa, joten käytä os.listdir()-ohjelmaa.

Määrittele funktio seuraavasti.

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

Perusajatus on sama kuin os.scandir():n tapauksessa.

Os.listdir():n avulla saadaan luettelo tiedostojen nimistä (hakemistojen nimistä). Kukin tiedostonimi tai hakemiston nimi yhdistetään vanhemman hakemiston polkuun os.path.join()-ohjelmalla, jotta saadaan aikaan täydellinen polku.

Jos kohde on symbolinen linkki, os.path.isfile() ja os.path.isdir() arvioivat kokonaisuuden. Jos siis haluat jättää symboliset linkit huomiotta, käytä ehdollista arviointia yhdessä os.path.islink():n kanssa, joka palauttaa symbolisille linkeille totuuden.

Kuten os.scandir() tapauksessa, jos sinun ei tarvitse käydä läpi alihakemistoja, poista vain seuraava osa.

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

Yllä oleva funktio epäonnistuu, jos tiedoston polku annetaan argumenttina. Jos tarvitset funktiota, joka palauttaa tiedoston tai hakemiston koon, voit kirjoittaa seuraavasti.

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