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