Obter unha lista de nomes de ficheiros e directorios en Python.

Negocios

Para obter unha lista de nomes de ficheiros e directorios (nomes de cartafoles) en Python, use a función do módulo os os.listdir().

os.listdir(path=’.’)
Devolve unha lista que contén os nomes das entradas no directorio especificado pola ruta.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

O módulo os está incluído na biblioteca estándar e non é necesario instalar. Non obstante, é necesario “importar”.

A seguinte información ofrécese aquí.

  • Obter unha lista de nomes de ficheiros e directorios.
  • Obtén só unha lista de nomes de ficheiros
  • Obtén só unha lista de nomes de directorio

O seguinte é un exemplo dunha estrutura de ficheiros (directorio).

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

Ademais de os.listdir(), tamén pode usar o módulo glob para obter unha lista de nomes de ficheiros e directorios (nomes de cartafol). glob permítelle especificar condicións usando comodíns (*), etc., e incluír subdirectorios de forma recursiva.

En Python 3.4 e posteriores, tamén é posible obter unha lista de ficheiros e directorios usando o módulo pathlib, que pode manipular camiños como obxectos. Do mesmo xeito que os globos anteriores, tamén se pode usar de forma condicional e recursiva.

Obter unha lista de nomes de ficheiros e directorios.

Se usa os.listdir() como está, devolverá unha lista de nomes de ficheiros e directorios.

import os

path = "./testdir"

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

O que obtén é unha lista de cadeas de camiños.

Obtén só unha lista de nomes de ficheiros

Se quere obter unha lista de só nomes de ficheiros, use a función os.path.isfile() para determinar se o camiño é un ficheiro. pasar só o nome do ficheiro como argumento da función os.path.isfile() non funcionará, polo que pasa a ruta completa como se mostra a continuación.
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']

Obtén só unha lista de nomes de directorio

Se só quere obter unha lista de nomes de directorios, use os.path.isdir() do mesmo xeito.

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