Egy fájl vagy könyvtár (mappa) méretének megismerése Pythonban

Üzleti

A Python standard könyvtár os segítségével megtudhatja egy fájl méretét (kapacitását) vagy egy könyvtárban található fájlok teljes méretét.

A következő három módszert ismertetjük. Az elérhető méretek egységei mind bájtok.

  • A fájl méretének lekérdezése:os.path.getsize()
  • Egy könyvtár méretének kiszámítása a következő függvények kombinálásával (Python 3.5 vagy újabb):os.scandir()
  • A következő függvények kombinálásával kapjuk meg a könyvtár méretét (Python 3.4 és korábbi verziók):os.listdir()

A fájl méretének lekérdezése: os.path.getsize()

A fájl méretét (kapacitását) az os.path.getsize() segítségével lehet megtudni.

Érvként adja meg annak a fájlnak az elérési útvonalát, amelynek a méretét meg szeretné kapni.

import os

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

Egy könyvtár (mappa) méretének lekérdezése: os.scandir()

Egy könyvtárban (mappában) található fájlok teljes méretének kiszámításához használja az os.scandir() parancsot.

Ez a függvény a Python 3.5-ben jelent meg, ezért a korábbi verziók az os.listdir() függvényt használják. os.listdir() példát később ismertetjük.

Definiáljon egy függvényt a következőképpen.

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

Az os.scandir() egy os.DirEntry objektum iterátorát adja vissza.

DirEntry objektumot, az is_file() és az is_dir() metódusokkal határozzuk meg, hogy fájlról vagy könyvtárról van-e szó. Ha fájlról van szó, a méretét a stat_result objektum st_size attribútumából kapjuk meg. Könyvtár esetén ezt a függvényt rekurzívan kell meghívni, hogy összeadja az összes méretet, és visszaadja a teljes méretet.

Ezenkívül az is_file() alapértelmezés szerint TRUE értéket ad vissza a fájlokra mutató szimbolikus hivatkozások esetében. Az is_dir() is true-t ad vissza a könyvtárakra mutató szimbolikus hivatkozásokra. Ha figyelmen kívül akarja hagyni a szimbolikus hivatkozásokat, állítsa az is_file() és az is_dir() follow_symlinks argumentumát false-ra.

Ha nincs szükséged az alkönyvtárak bejárására, akkor a következő részt egyszerűen törölheted.

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

A fenti függvény sikertelen lesz, ha a fájl elérési útját adjuk meg argumentumként. Ha szükséged van egy olyan függvényre, amely visszaadja egy fájl vagy könyvtár méretét, akkor a következőt írhatod.

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

Egy könyvtár (mappa) méretének lekérdezése: os.listdir()

A Python 3.4 vagy korábbi verziókban nincs os.scandir(), ezért használd az os.listdir() parancsot.

Definiáljon egy függvényt a következőképpen.

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

Az alapötlet ugyanaz, mint az os.scandir() esetében.

Az os.listdir() segítségével a fájlnevek (könyvtárnevek) listáját kaphatjuk meg. Minden egyes fájl- vagy könyvtárnév az os.path.join() segítségével összekapcsolódik a szülő könyvtár elérési útvonalával, így jön létre a teljes elérési útvonal.

Ha a cél egy szimbolikus link, az os.path.isfile() és az os.path.isdir() értékeli az entitást. Ha tehát figyelmen kívül akarjuk hagyni a szimbolikus linkeket, használjuk a feltételes megítélést az os.path.islink()-vel kombinálva, amely a szimbolikus linkek esetén igazat ad vissza.

Ahogy az os.scandir() esetében is, ha nincs szükségünk az alkönyvtárak bejárására, csak töröljük a következő részt.

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

A fenti függvény sikertelen lesz, ha a fájl elérési útját adjuk meg argumentumként. Ha szükséged van egy olyan függvényre, amely visszaadja egy fájl vagy könyvtár méretét, akkor a következőt írhatod.

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