Cómo encontrar archivos con una cierta extensión sólo en Python

  1. Método glob.glob para encontrar ficheros con cierta extensión
  2. os.listdir() método para encontrar los archivos con cierta extensión
  3. Método pathlib.glob para encontrar archivos con cierta extensión
  4. Encontrar archivos con cierta extensión en el directorio y sus subdirectorios en Python
  5. Ficheros de búsqueda del módulo pathlib de forma recursiva

Este artículo introduce diferentes métodos para encontrar ficheros con una cierta extensión sólo en Python.

Método glob.glob para encontrar ficheros con cierta extensión

Podríamos usar el módulo glob.glob para encontrar los archivos con una cierta extensión sólo en Python.

import glob

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

Los códigos anteriores muestran cómo encontrar los archivos con la extensión txt en el directorio C:\Test.

os.listdir() método para encontrar los archivos con cierta extensión

La función os.listdir() lista todos los archivos en el directorio dado, sin la información de la ruta del archivo. Puede extraer los archivos con la extensión específica utilizando la función str.endswith().

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

Necesita construir la ruta completa con os.path.join() function.

>>> 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 archivos con cierta extensión

El módulo pathlib module está introducido en Python 3.4 que ofrece rutas de sistemas de ficheros orientados a objetos. Proporciona dos estilos: Rutas de Windows en el sistema operativo Windows y rutas POSIX en sistemas similares a Unix.

>>> 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')]

El resultado se representa con WindowsPath, y puede convertir el resultado en la representación de la cadena añadiendo str(), como

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

Encontrar archivos con cierta extensión en el directorio y sus subdirectorios en Python

El patrón C:\Test\*.txt sólo busca los archivos txt en el directorio C:\Test, pero no en sus subdirectorios. Si quiere obtener también archivos txt en los subdirectorios, puede modificar el patrón un poco.

import glob

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

Los comodines ** entre Test y .txt significa que debe encontrar los archivos txt tanto en el directorio como en sus subdirectorios.

Ficheros de búsqueda del módulo pathlib de forma recursiva

De forma similar a añadir ** en glob.glob para buscar archivos de forma recursiva, también puede añadir ** en el método pathlib.Path.glob para encontrar los archivos con cierta extensión de forma recursiva.

>>> 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')]

Artículo relacionado - Python File

  • Escribir bytes en un archivo en Python
  • Cómo escribir una lista en un archivo con Python