Hent en liste over navne på filer og mapper i Python.

Forretning

Du kan få en liste over fil- og mappenavne (mappenavne) i Python ved at bruge os-modulets funktion os.listdir().

os.listdir(path='.')
Returnerer en liste med navnene på posterne i den mappe, der er angivet ved sti.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

os-modulet er inkluderet i standardbiblioteket og behøver ikke at blive installeret. Dog er “import” påkrævet.

Her findes følgende oplysninger.

  • Hent en liste over både fil- og mappenavne.
  • Hent kun en liste over filnavne
  • Hent kun en liste over mappenavne

Følgende er et eksempel på en filstruktur (mappe).

.
└── testdir
    ├── dir1
    ├── dir2
    ├── file1
    ├── file2.txt
    └── file3.jpg

Ud over os.listdir() kan du også bruge glob-modulet til at få en liste over fil- og mappenavne (mappenavne). glob giver dig mulighed for at angive betingelser ved hjælp af wildcards (*) osv. og rekursivt inkludere undermapper.

I Python 3.4 og senere er det også muligt at få en liste over filer og mapper ved hjælp af pathlib-modulet, som kan manipulere stier som objekter. Ligesom globs ovenfor kan det også bruges betinget og rekursivt.

Hent en liste over både fil- og mappenavne.

Hvis du bruger os.listdir() som det er, vil det returnere en liste over både fil- og mappenavne.

import os

path = "./testdir"

files = os.listdir(path)
print(type(files))  # <class 'list'>
print(files)        # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']

Du får en liste over stistrenge.

Hent kun en liste over filnavne

Hvis du kun vil have en liste med filnavne, skal du bruge funktionen os.path.isfile() til at bestemme, om stien er en fil.Det virker ikke at give kun filnavnet som argument for funktionen os.path.isfile(), så giv den fulde sti som vist nedenfor.
os.path.isfile(os.path.join(path, f))

files = os.listdir(path)
files_file = [f for f in files if os.path.isfile(os.path.join(path, f))]
print(files_file)   # ['file1', 'file2.txt', 'file3.jpg']

Hent kun en liste over mappenavne

Hvis du kun ønsker at få en liste over mappenavne, skal du bruge os.path.isdir() på samme måde.

files = os.listdir(path)
files_dir = [f for f in files if os.path.isdir(os.path.join(path, f))]
print(files_dir)    # ['dir1', 'dir2']
Copied title and URL