Neste post estão dois exemplos de como listar os arquivos de um diretório (e seus subdiretórios), aplicando um filtro ao nome do arquivo.
Para os dois exemplos, vou utilizar as variáveis abaixo:
base_path = r'c:\dir\with\bunch\of\files' filename_filter = "*.py"
A variável base_path é a que possui o diretório base que será utilizado na busca dos arquivos e a filename_filter possui o filtro que sera aplicado.
Uma observação sobre o filtro: Você pode definir o filtro como “*” e ele vai aceitar qualquer arquivo ou pode utilizar * como wildcards, por exemplo: O filtro “deploy*.y*ml” vai aceitar qualquer arquivo cujo nome comece com deploy e que tenha a extensao .y*ml, onde o * pode ser qualquer caractere.
Utilizando Python 3.4+
from pathlib import Path for filename in Path(base_path).rglob(filename_filter): print(filename)
No exemplo acima, a variável filename é um objeto do tipo Path.
Um ponto importante é que a função rglob retorna um generator e não uma lista. Sendo assim, não é possível utilizar funções do tipo len sem antes converter o retorno para lista.
Utilizando versões antigas do Python
import fnmatch import os for root, dirnames, filenames in os.walk(base_path): for filename in fnmatch.filter(filenames, filename_filter): print(os.path.join(root, filename))
Diferente do metodo utilizado no exemplo anterior, este trabalha apenas com strings e retorna apenas o nome do arquivo, por isso é necessário usar os.path.join(root, filename) para conseguir o caminho completo do arquivo.
Ambas abordagens funcionam com caminhos de rede também.
Espero ter ajudado.
Latest posts by Breno RdV (see all)
- Estamos de mudança! - abril 28, 2024
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022