Skip to content

Python Get All Files in a Directory: The Complete & Efficient Guide

Updated on

Listar arquivos em um diretório é uma das tarefas mais comuns em Python — seja para organizar dados, pré-processar arquivos ou automatizar fluxos de trabalho.

Neste guia atualizado, você vai aprender:

  • Como listar arquivos usando os.listdir
  • Como listar arquivos recursivamente com os.walk
  • Como filtrar arquivos por extensão
  • Como listar imagens, vídeos ou tipos específicos de arquivos
  • A forma moderna: fazer tudo isso com pathlib, a abordagem recomendada hoje
  • Como usar padrões glob de forma eficaz

TL;DR — Receitas Rápidas

TarefaMelhor Método
Listar arquivos (não recursivo)os.listdir ou pathlib.Path.iterdir()
Listar arquivos recursivamenteos.walk ou pathlib.Path.rglob()
Filtrar por extensãopathlib.Path.rglob("*.csv")
Casamento de padrõesglob.glob() / pathlib.Path.rglob("*pattern*")
Melhor no geralpathlib

1. Usando os.listdir (Básico, Não Recursivo)

A função os.listdir retorna nomes de arquivos e pastas dentro de um diretório — mas não entra em subpastas.

import os
 
def list_files(directory):
    return os.listdir(directory)
 
print(list_files("/path/to/your/directory"))

Isso retorna todas as entradas no diretório, mas você não conseguirá filtrar ou percorrer recursivamente sem lógica extra. Para a maior parte do código Python moderno, considere pathlib (próximas seções), mas isso ainda é útil para scripts rápidos.


2. Listando Todos os Arquivos Recursivamente com os.walk

Para percorrer todas as subpastas e listar todos os arquivos:

import os
 
def list_files_recursively(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            print(os.path.join(root, file))
 
list_files_recursively("/path/to/your/directory"))

os.walk é poderoso e eficiente em memória, sendo ótimo para árvores de diretórios grandes.


3. Filtrando Arquivos por Extensão

Você pode filtrar durante o percurso:

import os
 
def list_files_by_extension(directory, extension):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(extension):
                print(os.path.join(root, file))
 
list_files_by_extension("/path/to/your/directory", ".json")

Use (".jpg", ".png") para múltiplas extensões.


4. Listando Arquivos de Imagem ou Vídeo

Listar imagens:

import os
 
def list_image_files(directory):
    image_ext = (".jpg", ".jpeg", ".png", ".gif", ".webp")
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.lower().endswith(image_ext):
                print(os.path.join(root, file))
 
list_image_files("/path/to/your/directory")

Listar vídeos:

import os
 
def list_video_files(directory):
    video_ext = (".mp4", ".avi", ".mov", ".mkv")
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.lower().endswith(video_ext):
                print(os.path.join(root, file))
 
list_video_files("/path/to/your/directory")

NOVO: A Maneira Moderna — Usando pathlib (Recomendado)

Desde o Python 3.4+, pathlib é a forma preferida de trabalhar com caminhos. É mais legível e poderoso do que os.path.

Listar todos os arquivos (não recursivo):

from pathlib import Path
 
def list_files(directory):
    return [p for p in Path(directory).iterdir() if p.is_file()]
 
print(list_files("/path/to/dir"))

Listar todos os arquivos recursivamente:

from pathlib import Path
 
def list_files_recursive(directory):
    return list(Path(directory).rglob("*"))
 
print(list_files_recursive("/path/to/dir"))

Filtrar por extensão:

from pathlib import Path
 
for file in Path("/path/to/dir").rglob("*.json"):
    print(file)

Filtrar múltiplos tipos:

from pathlib import Path
 
extensions = ("*.jpg", "*.png", "*.jpeg")
for ext in extensions:
    for file in Path("path/to/dir").rglob(ext):
        print(file)

Pathlib torna isso extremamente simples e limpo.


5. Casamento de Padrões com glob

glob é perfeito quando você precisa de correspondência de padrões ao estilo do shell:

import glob
 
json_files = glob.glob("/path/to/your/directory/**/*.json", recursive=True)
 
print(json_files)

Padrões úteis:

  • "*.csv"
  • "data_*"
  • "**/*.jpg" (recursivo)

Conclusão

Neste guia, você aprendeu várias formas de listar arquivos em Python:

  • os.listdir para varreduras simples de diretório
  • os.walk para travessia recursiva
  • Filtragem de arquivos por extensão
  • Manipulação de tipos especiais de arquivos como imagens e vídeos
  • glob para busca com curingas
  • pathlib — a abordagem moderna e recomendada

Seja limpando dados, construindo scripts de automação de arquivos ou trabalhando em fluxos de machine learning, essas técnicas vão ajudar você a escrever código Python mais limpo, rápido e fácil de manter.


FAQs

Como listar todos os arquivos em um diretório usando Python?

Use:

os.listdir(path)

ou a opção moderna:

Path(path).iterdir()

Como listar todos os arquivos recursivamente?

Use:

os.walk(path)

ou:

Path(path).rglob("*")

Como filtrar arquivos por extensão?

Use:

file.endswith(".json")

ou:

Path(path).rglob("*.json")