Como encontrar ficheiros com uma certa extensão apenas em Python

  1. Método glob.glob para encontrar arquivos com uma certa extensão
  2. os.listdir() método para encontrar arquivos com uma certa extensão
  3. Método pathlib.glob para encontrar arquivos com certas extensões
  4. Encontre arquivos com uma certa extensão no diretório e seus subdiretórios em Python
  5. Os arquivos de busca do módulo pathlib recursivamente

Este artigo introduz diferentes métodos para encontrar ficheiros com uma certa extensão apenas em Python.

Método glob.glob para encontrar arquivos com uma certa extensão

Poderíamos utilizar o módulo glob.glob para encontrar os arquivos com uma certa extensão apenas em Python.

import glob

targetPattern = r"C:\Test\*.txt"
glob.glob(targetPattern)

Os códigos acima demonstram como encontrar os arquivos com a extensão txt no diretório C:\Test.

os.listdir() método para encontrar arquivos com uma certa extensão

A função os.listdir() lista todos os arquivos no diretório dado, sem a informação do caminho do arquivo. Você poderia extrair os arquivos com a extensão específica utilizando a função str.endswith().

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [_ for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['test.txt', 'test1.txt']

Você precisa construir o caminho completo com a função os.path.join().

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [os.path.join(fileDir, _) for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test1.txt']

Método pathlib.glob para encontrar arquivos com certas extensões

módulo pathlib é introduzido no Python 3.4 que oferece caminhos de sistema de arquivos orientados a objetos. Ele fornece dois estilos: Caminhos do Windows no sistema operacional Windows e caminhos POSIX em sistemas Unix-alike.

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt')]

O resultado é representado com WindowsPath, e você poderia converter o resultado para a representação em string adicionando str(), como

>>> [str(_) for _ in pathlib.Path(fileDir).glob(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test.txt']

Encontre arquivos com uma certa extensão no diretório e seus subdiretórios em Python

O padrão C:\Test*.txt apenas pesquisa os arquivos txt no diretório C:\Test, mas não em seus subdiretórios. Se você também quiser obter os arquivos txt nos subdiretórios, você pode modificar um pouco o padrão.

import glob

targetPattern = r"C:\Test\**\*.txt"
glob.glob(targetPattern)

Os curingas ** entre Test e .txt significa que ele deve encontrar os arquivos txt tanto no diretório quanto em seus subdiretórios.

Os arquivos de busca do módulo pathlib recursivamente

Similar a adicionar ** em glob.glob para procurar arquivos recursivamente, você também pode adicionar ** no método pathlib.Path.glob para encontrar os arquivos com uma certa extensão recursivamente.

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"**\*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt'), WindowsPath('C:/Test/sub/test1.txt')]

Artigo relacionado - Python File

  • Como excluir um arquivo e diretório em Python
  • Como copiar um arquivo em Python