Como listar todos os arquivos de um diretório em Python e adicioná-los a uma lista?

Ana Maria Gomes
5 minutos de leitura

Conteúdos do tutorial

Ao trabalhar com sistemas de arquivos em Python, uma tarefa comum é listar todos os arquivos em um diretório e, possivelmente, armazená-los em uma lista para processamento posterior. Python oferece várias maneiras de realizar isso, cada uma com suas próprias vantagens. Vamos explorar alguns desses métodos.

Usando os.listdir() e os.path.isfile()

O módulo os em Python é uma utilidade para interagir com o sistema operacional. os.listdir() é um método que retorna uma lista de todas as entradas em um diretório fornecido pelo caminho, incluindo tanto arquivos quanto diretórios.

from os import listdir
from os.path import isfile, join

caminho = 'seu/caminho/do/diretorio'
somente_arquivos = [f for f in listdir(caminho) if isfile(join(caminho, f))]
Testar

Este trecho de código fornecerá uma lista de nomes de arquivos no diretório especificado.

Usando os.walk()

Outro método fornecido pelo módulo os é os.walk(), que é usado para gerar os nomes dos arquivos em uma árvore de diretórios, percorrendo a árvore de cima para baixo ou de baixo para cima.

from os import walk

caminho = 'seu/caminho/do/diretorio'
f = []
for (caminho_dir, nomes_dir, nomes_arquivos) in walk(caminho):
    f.extend(nomes_arquivos)
    break

Isso listará arquivos no diretório superior. Se você quiser listar arquivos em todos os subdiretórios também, remova a instrução break.

Usando o Módulo glob

O módulo glob é particularmente útil porque permite correspondência de padrões e pode ser usado para listar arquivos e diretórios com extensões ou padrões específicos.

import glob

# Lista todos os arquivos e diretórios no caminho
print(glob.glob("/home/nomeusuario/*"))

# Lista todos os arquivos .txt no caminho
print(glob.glob("/home/nomeusuario/*.txt"))

O módulo glob não listará arquivos ocultos (aqueles que começam com um ponto) a menos que sejam explicitamente incluídos no padrão.

Usando os.scandir() no Python 3.5+

Python 3.5 introduziu um novo método os.scandir() que é mais eficiente que os.listdir() e retorna um iterador de objetos os.DirEntry correspondentes às entradas no diretório fornecido pelo caminho.

import os

with os.scandir('seu/caminho/do/diretorio') as entradas:
    for entrada in entradas:
        if entrada.is_file():
            print(entrada.name)

Usando pathlib a partir do Python 3.4

O módulo pathlib oferece objetos de caminho de alto nível. Veja como você pode usá-lo para listar arquivos:

import pathlib

# Lista todos os arquivos no diretório atual
lista_arquivos = [p for p in pathlib.Path('.').iterdir() if p.is_file()]

Resumo

Neste artigo, exploramos vários métodos para listar todos os arquivos em um diretório usando Python. Se você prefere o módulo os tradicional com suas funções listdir() e walk(), as capacidades de correspondência de padrões do módulo glob, a eficiência de os.scandir(), ou a abordagem orientada a objetos de pathlib, Python oferece uma variedade de ferramentas para atender às suas necessidades. Lembre-se de escolher o método que melhor se adapta ao seu caso de uso específico e à versão do Python.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial