Saltar al contenido

OS.Walk y Fnmatch en Python

Visión general

En una publicación anterior, OS.walk en Python, describí cómo usar os.walk y mostré algunos ejemplos sobre cómo usarlo en scripts.

En este artículo, mostraré cómo usar la función del módulo os.walk () para recorrer un árbol de directorios y el módulo fnmatch para hacer coincidir los nombres de los archivos.

¿Qué es OS.walk?

Genera los nombres de los archivos en un árbol de directorios recorriendo el árbol de arriba hacia abajo o de abajo hacia arriba.

Para cada directorio en el árbol arraigado en la parte superior del directorio (incluida la parte superior), produce una tupla de 3 (ruta de directorio, nombres de directorio, nombres de archivo).

dirpath # es una cadena, la ruta al directorio.

nombres de directorio # es una lista de los nombres de los subdirectorios en dirpath (excluyendo ‘.’ y ‘..’).

nombres de archivo # es una lista de los nombres de los archivos que no son de directorio en dirpath.

Tenga en cuenta que los nombres de las listas no contienen componentes de ruta.

Para obtener una ruta completa (que comienza con top) a un archivo o directorio en dirpath, haga os.path.join (dirpath, name). Para obtener más información, consulte el Documentos de Python.

Que es Fnmatch

El módulo fnmatch compara los nombres de los archivos con patrones de estilo glob, como los que usan los shells de Unix.

Estas no son las mismas que las reglas de expresión regular más sofisticadas. Es simplemente una operación de coincidencia de cadenas.

Si le resulta más conveniente usar un estilo de patrón diferente, por ejemplo, expresiones regulares, simplemente use operaciones de expresiones regulares para hacer coincidir sus nombres de archivo. http://www.doughellmann.com/PyMOTW/fnmatch/

¿Qué hace?

El módulo fnmatch se utiliza para la coincidencia de patrones comodín.

Coincidencia simple

fnmatch () compara un solo nombre de archivo con un patrón y devuelve un valor booleano que indica si coinciden o no. La comparación distingue entre mayúsculas y minúsculas cuando el sistema operativo utiliza un sistema de archivos que distingue entre mayúsculas y minúsculas.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

Filtración

Para probar una secuencia de nombres de archivo, puede usar filter (). Devuelve una lista de los nombres que coinciden con el argumento del patrón.

Encuentra todos los archivos mp3

Este script buscará archivos * .mp3 desde rootPath (“/”)


import fnmatch
import os
 
rootPath="https://www.pythonforbeginners.com/"
pattern = '*.mp3'
 
for root, dirs, files in os.walk(rootPath):
    for filename in fnmatch.filter(files, pattern):
        print( os.path.join(root, filename))

Buscar archivos específicos en la computadora

Este script usa ‘os.walk’ y ‘fnmatch’ con filtros para buscar en el disco duro todos los archivos de imagen

import fnmatch
import os

images = ['*.jpg', '*.jpeg', '*.png', '*.tif', '*.tiff']
matches = []

for root, dirnames, filenames in os.walk("C:"):
    for extensions in images:
        for filename in fnmatch.filter(filenames, extensions):
            matches.append(os.path.join(root, filename))

Hay muchas otras formas (y más rápidas) de hacer esto, pero ahora comprende los conceptos básicos.

Más lectura

http://rosettacode.org/wiki/Walk_a_directory/Recursively#Python

Patrón de coincidencia de Stackoverflow

Stackoverflow oswalk con fnmatch

osWalk en Python

Divirtiéndose con osWalk

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.