Få størrelsen af en fil eller mappe (folder) i Python

Forretning

Ved hjælp af Pythons standardbibliotek os kan du få størrelsen (kapaciteten) af en fil eller den samlede størrelse af de filer, der er indeholdt i en mappe.

Følgende tre metoder forklares. Enhederne for de størrelser, der kan opnås, er alle bytes.

  • Få oplyst størrelsen af filen:os.path.getsize()
  • Få størrelsen af en mappe ved at kombinere følgende funktioner (Python 3.5 eller nyere):os.scandir()
  • Kombiner følgende funktioner for at få størrelsen af mappen (Python 3.4 og tidligere):os.listdir()

Få oplyst størrelsen af filen: os.path.getsize()

Filens størrelse (kapacitet) kan fås med os.path.getsize().

Angiv stien til den fil, hvis størrelse du ønsker at få oplyst, som et argument.

import os

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

Få oplyst størrelsen af en mappe: os.scandir()

Hvis du vil beregne den samlede størrelse af de filer, der er indeholdt i en mappe, skal du bruge os.scandir().

Denne funktion blev tilføjet i Python 3.5, så tidligere versioner bruger os.listdir(). os.listdir() eksemplet er beskrevet senere.

Definer en funktion som følger.

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() returnerer en iterator af et os.DirEntry-objekt.

DirEntry-objektet, skal du bruge metoderne is_file() og is_dir() til at bestemme, om det er en fil eller en mappe. Hvis det er en fil, fås størrelsen fra st_size-attributten i stat_result-objektet. Hvis der er tale om en mappe, kaldes denne funktion rekursivt for at lægge alle størrelserne sammen og returnere den samlede størrelse.

Desuden returnerer is_file() som standard TRUE for symbolske links til filer. Is_dir() returnerer også sandt for symbolske links til mapper. Hvis du ønsker at ignorere symbolske links, skal du sætte argumentet follow_symlinks i is_file() og is_dir() til false.

Hvis du ikke har brug for at gennemløbe undermapperne, kan du også bare slette følgende del.

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

Ovenstående funktion fejler, hvis filens sti overføres som argument. Hvis du har brug for en funktion til at returnere størrelsen af en fil eller en mappe, kan du skrive følgende.

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

Få oplyst størrelsen af en mappe: os.listdir()

Der findes ikke os.scandir() i Python 3.4 eller tidligere, så brug os.listdir().

Definer en funktion som følger.

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

Den grundlæggende idé er den samme som i tilfældet med os.scandir().

Det, der kan fås med os.listdir(), er en liste over filnavne (mappenavne). Hvert filnavn eller mappenavn forbindes med stien til den overordnede mappe med os.path.join() for at skabe den fulde sti.

Hvis målet er et symbolsk link, vil os.path.isfile() og os.path.isdir() bedømme enheden. Så hvis du ønsker at ignorere symbolske links, skal du bruge betinget bedømmelse i kombination med os.path.islink(), som returnerer sandt for symbolske links.

Som i tilfældet med os.scandir() skal du bare slette følgende del, hvis du ikke har brug for at gennemløbe undermapperne.

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

Ovenstående funktion fejler, hvis filens sti overføres som argument. Hvis du har brug for en funktion til at returnere størrelsen af en fil eller en mappe, kan du skrive følgende.

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