Pular para o conteúdo

Como listar arquivos em diretório em Python

[

Como obter uma lista de todos os arquivos em um diretório com Python

por Ian Currie

Ao lidar com operações relacionadas a arquivos em Python, uma etapa natural é obter uma lista de todos os arquivos e pastas em um diretório. No entanto, ao pesquisar sobre esse assunto, você pode se surpreender ao encontrar várias maneiras de fazer isso.

Quando você se depara com várias maneiras de fazer algo, pode ser um indicativo de que não há uma solução única para todos os problemas. Provavelmente, cada solução terá suas próprias vantagens e desvantagens. Esse é o caso quando se trata de obter uma lista do conteúdo de um diretório em Python.

Neste tutorial, vamos nos concentrar nas técnicas mais versáteis do módulo pathlib para listar os itens em um diretório, mas também iremos abordar um pouco sobre algumas ferramentas alternativas.

Antes do lançamento do pathlib no Python 3.4, se você quisesse trabalhar com caminhos de arquivo, usaria o módulo os. Embora isso fosse muito eficiente em termos de desempenho, você teria que lidar com todos os caminhos como strings.

Manipular caminhos como strings pode parecer bom no começo, mas uma vez que você começa a combinar vários sistemas operacionais, as coisas ficam mais complicadas. Você também acaba com um monte de código relacionado à manipulação de strings, que pode ficar muito distante do que um caminho de arquivo realmente é. As coisas podem ficar obscuras muito rapidamente.

Isso não quer dizer que trabalhar com caminhos como strings não seja viável - afinal de contas, os desenvolvedores se viraram bem sem o pathlib por muitos anos! O módulo pathlib apenas cuida de muitas das coisas complicadas e permite que você se concentre na lógica principal do seu código.

Tudo começa com a criação de um objeto Path, que será diferente dependendo do seu sistema operacional (SO). No Windows, você obterá um objeto WindowsPath, enquanto no Linux e macOS será retornado um objeto PosixPath:

import pathlib
desktop = pathlib.Path("C:/Users/RealPython/Desktop")
desktop
import pathlib
desktop = pathlib.Path("/home/RealPython/Desktop")
desktop

Com esses objetos específicos para cada sistema operacional, você pode aproveitar os diversos métodos e propriedades disponíveis para manipular os caminhos de forma eficiente.

Aqui estão algumas técnicas para obter uma lista de todos os arquivos em um diretório com Python:

1. Listando de forma recursiva com .rglob()

O método .rglob() permite listar de forma recursiva todos os arquivos em um diretório e seus subdiretórios. Veja um exemplo de código:

for file_path in desktop.rglob("*"):
print(file_path)

Esse código irá listar todos os arquivos no diretório desktop e em seus subdiretórios. O padrão "*" significa que todos os arquivos serão incluídos na listagem.

2. Usando um padrão de pesquisa com Python Glob para listagem condicional

Você também pode fazer uma listagem condicional usando padrões de pesquisa do Python Glob. Isso permite filtrar os arquivos com base em seus nomes ou extensões. Veja alguns exemplos:

Listagem condicional usando .glob()

for file_path in desktop.glob("*.txt"):
print(file_path)

Essa listagem irá mostrar apenas os arquivos com a extensão .txt no diretório desktop.

Listagem condicional usando .rglob()

for file_path in desktop.rglob("*.py"):
print(file_path)

Nesse exemplo, apenas os arquivos com a extensão .py serão listados no diretório desktop e em seus subdiretórios.

Filtragem avançada com os métodos do Glob

Por meio dos métodos do Glob, você pode fazer uma filtragem mais avançada, usando múltiplos padrões de pesquisa. Por exemplo:

for file_path in desktop.glob("file[1-3].txt"):
print(file_path)

Nesse caso, apenas os arquivos que possuem nomes como file1.txt, file2.txt e file3.txt serão listados no diretório desktop.

3. Excluindo diretórios indesejados da listagem

Às vezes, pode ser necessário excluir diretórios específicos da listagem. Existem diferentes maneiras de fazer isso:

Usando .rglob() para filtrar diretórios inteiros

Você pode usar o método .rglob() em combinação com um padrão de pesquisa para filtrar diretórios inteiros. Veja um exemplo:

for file_path in desktop.rglob("*"):
if not file_path.is_dir():
print(file_path)

Nesse código, apenas arquivos serão listados, excluindo assim os diretórios.

Criando uma função .iterdir() recursiva

Outra opção é criar uma função recursiva que utilize o método .iterdir(). Veja como fazer isso:

def recursive_iterdir(directory):
for item in directory.iterdir():
if item.is_file():
print(item)
elif item.is_dir():
recursive_iterdir(item)
recursive_iterdir(desktop)

Dessa forma, você pode iterar sobre todos os arquivos em um diretório e seus subdiretórios, excluindo os diretórios da listagem.

Essas são apenas algumas das técnicas para obter uma lista de todos os arquivos em um diretório com Python. Cada uma delas tem suas próprias vantagens e desvantagens, então escolha aquela que melhor se adequa às suas necessidades.

Em resumo, o módulo pathlib do Python é uma ferramenta poderosa que oferece várias maneiras de manipular caminhos de arquivos e pastas. Com as técnicas apresentadas neste tutorial, você estará apto a obter uma lista completa de todos os arquivos em um diretório com Python.

Esperamos que este artigo tenha sido útil para você. Continue aprendendo e praticando Python para fortalecer suas habilidades!