Encontrar arquivos com extensões específicas é uma tarefa comum ao trabalhar com arquivos em Python. Este artigo explora vários métodos eficientes e versáteis para alcançar isso, atendendo a diferentes necessidades e estilos de codificação. Abordaremos vários módulos e técnicas Python, permitindo que você escolha a abordagem ideal para o seu caso de uso específico.
Sumário
- Usando o módulo
glob
- Aproveitando o módulo
os
- Empregando
pathlib
para buscas em um único diretório - Busca recursiva com
os.walk
- Busca recursiva com
pathlib.rglob
1. Usando o módulo glob
O módulo glob
oferece uma maneira concisa de localizar arquivos que correspondem a um padrão definido dentro de um único diretório. Sua função glob()
retorna uma lista de caminhos que satisfazem o padrão.
import glob
def find_files_with_extension_glob(directory, extension):
"""Encontra arquivos com uma extensão dada usando glob.glob()."""
return glob.glob(f"{directory}/*{extension}")
# Exemplo:
files = find_files_with_extension_glob("./my_directory", ".txt")
print(files)
2. Aproveitando o módulo os
O módulo os
fornece controle mais granular. os.listdir()
lista todas as entradas em um diretório, permitindo filtragem personalizada.
import os
def find_files_with_extension_os(directory, extension):
"""Encontra arquivos com uma extensão dada usando os.listdir()."""
files = []
for filename in os.listdir(directory):
if filename.endswith(extension):
files.append(os.path.join(directory, filename))
return files
# Exemplo:
files = find_files_with_extension_os("./my_directory", ".txt")
print(files)
3. Empregando pathlib
para buscas em um único diretório
O módulo pathlib
fornece uma abordagem orientada a objetos. Seu método glob()
oferece uma sintaxe mais limpa do que glob.glob()
.
from pathlib import Path
def find_files_with_extension_pathlib(directory, extension):
"""Encontra arquivos com uma extensão dada usando pathlib.glob()."""
return list(Path(directory).glob(f"*{extension}"))
# Exemplo:
files = find_files_with_extension_pathlib("./my_directory", ".txt")
print(files)
4. Busca recursiva com os.walk
Para pesquisar subdiretórios, os.walk()
percorre a árvore de diretórios, permitindo que você verifique cada arquivo para a extensão desejada.
import os
def find_files_recursive_os(directory, extension):
"""Recursivamente encontra arquivos com uma extensão dada usando os.walk()."""
files = []
for root, _, filenames in os.walk(directory):
for filename in filenames:
if filename.endswith(extension):
files.append(os.path.join(root, filename))
return files
# Exemplo:
files = find_files_recursive_os("./my_directory", ".txt")
print(files)
5. Busca recursiva com pathlib.rglob
O método rglob()
do pathlib
oferece a solução mais elegante para buscas recursivas.
from pathlib import Path
def find_files_recursive_pathlib(directory, extension):
"""Recursivamente encontra arquivos com uma extensão dada usando pathlib.rglob()."""
return list(Path(directory).rglob(f"*{extension}"))
# Exemplo:
files = find_files_recursive_pathlib("./my_directory", ".txt")
print(files)
Lembre-se de criar uma pasta “my_directory” com alguns arquivos .txt para que os exemplos funcionem corretamente. Selecione o método que melhor se alinha ao seu estilo de codificação e às demandas do projeto. Para buscas simples em um único diretório, glob
ou pathlib.glob()
são excelentes opções. Para buscas recursivas, pathlib.rglob()
fornece a solução mais concisa e legível.