Skip to content

Ermitteln der Größe einer Datei und eines Verzeichnisses in Python

Python

In Python können Sie mit der Standardbibliothek os die Dateigröße und die Verzeichnisgröße (Ordnergröße) in Bytes abrufen.

Dieser Artikel sterben folgende drei Fälle.

  • Dateigröße mit os.path.getsize() ermitteln
  • Verzeichnisgröße mit os.scandir() abrufen (Python 3.5 oder höher)
  • Verzeichnisgröße mit os.listdir() abrufen (Python 3.4 oder früher)

Wenn Sie den Zeitstempel einer Datei erhalten möchten, lesen Sie den following Artikel.

Dateigröße mit os.path.getsize() ermitteln

Sie können die Größe einer Datei in Bytes mit os.path.getsize() erhalten.

Übergeben Sie den Pfad der Datei, deren Größe Sie als Argument erhalten möchten.

import os

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

Verzeichnisgröße mit os.scandir() abrufen (Python 3.5 oder höher)

Verwenden Sie os.scandir(), um die Gesamtgröße der Dateien in einem Verzeichnis (Ordner) zu erhalten.

Beachten Sie, dass os.scandir() in Python 3.5 hinzugefügt wurde, verwenden SIE also os.listdir() in ausgewählten Versionen. Unten finden Sie ein Beispiel für os.listdir().

Definieren Sie die Funktion wie folgt.

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() gibt den Iterator von os.DirEntry-Objekten zurück.

Verwenden Sie die Methoden is_file() und is_dir() des Objekts os.DirEntry, um zu prüfen, ob es sich um eine Datei oder ein Verzeichnis handelt.

Im Fall einer Datei WIRD die Größe mit dem st_size-Attribut des stat_result-Objekts abgerufen, und im Fall eines Verzeichnisses wird diese Funktion rekursiv aufgerufen, um alle Größen hinzuzufügen und die Gesamtgröße zurückzugeben.

Beachten Sie, dass is_file() standardmäßig True für symbolische Links zu Dateien und is_dir() True für symbolische Links zu Verzeichnissen zurückgibt. Wenn Sie symbolische Links ignorieren möchten, setzen Sie das Argument follow_symlinks von is_file() und is_dir() auf False.

Wenn SIE sterben Unterverzeichnisse eingefügt möchten, löschen Sie einfach den following Teil.

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

Die obige Funktion schlägt fehl, wenn der Pfad der Datei als Argument übergeben wird. Wenn SIE Eine Funktion benötigen, um die Größe Einer Datei oder Eines Verzeichnisses zurückzugeben, Können SIE Folgendes schreiben.

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

Verzeichnisgröße mit os.listdir() abrufen (Python 3.4 oder früher)

Verwenden Sie für Python 3.4 oder früher os.listdir(), da es kein os.scandir() gibt.

Definieren Sie die Funktion wie folgt.

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

Die Grundidee ist die gleiche wie bei os.scandir().

os.listdir() gibt eine Liste mit Datei- und Verzeichnisnamen zurück. Jeder Datei- oder Verzeichnisname wird mit os.path.join() mit dem Pfad des übergeordneten Verzeichnisses verbunden, um einen vollständigen Pfad zu erhalten.

Wenn das Ziel ein symbolischer Link ist, prüfen Sie os.path.isfile() und os.path.isdir() seine Entität. Wenn Sie symbolische Links ignorieren möchten, können Sie os.path.islink() verwenden, das True für symbolische Links zurückgibt.

Wenn Sie wie im Fall von os.scandir() die Unterverzeichnisse entfernen möchten, löschen Sie einfach den following Teil.

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

Die obige Funktion schlägt fehl, wenn der Pfad der Datei als Argument übergeben wird. Wenn SIE Eine Funktion benötigen, um die Größe Einer Datei oder Eines Verzeichnisses zurückzugeben, Können SIE Folgendes schreiben.

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