Obteniu una llista de noms de fitxers i directoris a Python.

Negocis

Per obtenir una llista de noms de fitxers i directoris (noms de carpetes) a Python, utilitzeu la funció del mòdul os os.listdir().

os.listdir(path=’.’)
Retorna una llista que conté els noms d’entrada al directori especificat per ruta.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

El mòdul OS s’inclou a la biblioteca estàndard i no cal instal·lar-lo. Tanmateix, cal “importar”.

La informació següent es proporciona aquí.

  • Obteniu una llista dels noms dels fitxers i dels directoris.
  • Obteniu només una llista de noms de fitxers
  • Obteniu només una llista de noms de directoris

El següent és un exemple d’estructura de fitxers (directori).

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

A més d’os.listdir(), també podeu utilitzar el mòdul glob per obtenir una llista de noms de fitxers i directoris (noms de carpetes). glob us permet especificar condicions utilitzant comodins (*), etc., i incloure recursivament subdirectoris.

A Python 3.4 i posteriors, també és possible obtenir una llista de fitxers i directoris mitjançant el mòdul pathlib, que pot manipular camins com a objectes. Com els globus anteriors, també es pot utilitzar de manera condicional i recursiva.

Obteniu una llista dels noms dels fitxers i dels directoris.

Si utilitzeu os.listdir() tal qual, retornarà una llista de noms de fitxers i directoris.

import os

path = "./testdir"

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

El que obteniu és una llista de cadenes de camí.

Obteniu només una llista de noms de fitxers

Si voleu obtenir una llista només de noms de fitxers, utilitzeu la funció os.path.isfile() per determinar si el camí és un fitxer. passar només el nom del fitxer com a argument de la funció os.path.isfile() no funcionarà, així que passeu el camí complet com es mostra a continuació.
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']

Obteniu només una llista de noms de directoris

Si només voleu obtenir una llista de noms de directoris, utilitzeu os.path.isdir() de la mateixa manera.

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