Verkrijg een lijst van bestands- en mapnamen in Python.

Bedrijf

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']