Om een lijst van bestands- en mapnamen (mapnamen) in Python te krijgen, gebruik je de os module functie os.listdir().
os.listdir(path='.')
Geeft als resultaat een lijst met de namen van de ingangen in de map die door pad wordt opgegeven.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
De os module is opgenomen in de standaard bibliotheek en hoeft niet geïnstalleerd te worden. “Import” is echter wel vereist.
De volgende informatie wordt hier verstrekt.
- Verkrijg een lijst van zowel bestands- als mapnamen.
- Alleen een lijst met bestandsnamen opvragen
- Alleen een lijst met mapnamen opvragen
Het volgende is een voorbeeld van een bestand (map) structuur.
. └── testdir ├── dir1 ├── dir2 ├── file1 ├── file2.txt └── file3.jpg
Naast os.listdir(), kun je ook de glob module gebruiken om een lijst van bestands- en mapnamen (mapnamen) op te vragen. glob staat je toe om voorwaarden te specificeren met behulp van wildcards (*), enz., en recursief submappen op te nemen.
In Python 3.4 en later is het ook mogelijk om een lijst van bestanden en mappen te krijgen met behulp van de pathlib module, die paden als objecten kan manipuleren. Net als globs hierboven, kan het ook voorwaardelijk en recursief worden gebruikt.
Verkrijg een lijst van zowel bestands- als mapnamen.
Als je os.listdir() gebruikt zoals het is, zal het een lijst teruggeven van zowel bestands- als mapnamen.
import os path = "./testdir" files = os.listdir(path) print(type(files)) # <class 'list'> print(files) # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']
Wat je krijgt is een lijst van pad strings.
Alleen een lijst met bestandsnamen opvragen
Als je een lijst van alleen bestandsnamen wilt krijgen, gebruik dan de os.path.isfile() functie om te bepalen of het pad een bestand is. Alleen de bestandsnaam doorgeven als argument van de os.path.isfile() functie zal niet werken, dus geef het volledige pad door zoals hieronder getoond wordt.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']
Alleen een lijst met mapnamen opvragen
Als je alleen een lijst van directorynamen wilt krijgen, gebruik je os.path.isdir() op dezelfde manier.
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']