Python fnmatch

Python fnmatch

Cuando se trabaja con archivos y sistemas de archivos, es común buscar en muchos archivos para descubrir un archivo determinado. Encontrar los archivos necesarios de muchos archivos tendrá una eternidad si se hace manualmente. Como resultado, los sistemas operativos y los lenguajes de programación incluyen instalaciones para localizar dinámicamente los archivos necesarios. Estas utilidades generalmente se dirigen a los nombres de archivo y usan la coincidencia de patrones para intentar localizar los archivos relevantes.

La biblioteca FNMatch en el lenguaje de programación de Python se puede usar para ubicar archivos en sistemas operativos basados ​​en UNIX como MacOS y Linux. Este artículo utiliza el módulo fnmatch en Python para hacer una coincidencia de patrones.

Que es fnmatch?

Es un paquete de pitón común para comodines, como los que se usan en conchas Unix. Si un solo nombre de archivo coincide con un patrón, fnmatch () devuelve verdadero; de lo contrario, devuelve falso.

Funciones proporcionadas por el módulo fnmatch

El módulo fnmatch contiene las funciones fnmatch (), fnmatchcase (), filtre () y traducle (). Los programas de ejemplo que demuestran cada función en profundidad se pueden encontrar a continuación.

Ejemplo 1:

Este es el primero de varios ejemplos en nuestro artículo sobre el método fnmatch (). Si el nombre de determinación del archivo coincide con la cadena de patrón, el método FNMatch () ejecutado devuelve un valor booleano. Si el sistema operativo no es insensible al caso, la comparación se llevará a cabo después de que ambos parámetros se hayan normalizado a todos los caracteres de caso inferior y superior.

Aquí hay un programa; Primero, hemos importado el módulo fnmatch y el sistema operativo. Después de eso, buscamos todos los archivos que comienzan con 'fnmatch' y terminan con '.py '. Finalmente, imprima el resultado, como puede ver en la última línea de código.

importar fnmatch
importar sistema operativo
Patrn = 'fnmatch_*.py '
Imprimir ('El patrón es', Patrn)
imprimir()
file_name = OS.ListDir ('.')
Para el nombre en file_name:
Imprimir ('Nombre del archivo: %-25s %s' %(nombre, fnmatch.fnmatch (nombre, patrn)))

Aquí en la salida, puede ver que el patrón y los archivos que coinciden con el patrón se enumeran.

Ejemplo 2:

Un ejemplo más elabora la función fnmatch. Esta función requiere el nombre del archivo y un patrón de cadena de caracteres. El nombre del archivo se compara con el patrón, y el método devuelve verdadero o falso.

En el siguiente ejemplo, hemos importado los módulos Glob y Fnmatch que son necesarios para que este programa ejecute. Después de eso, hemos compilado una lista de todos los archivos presentes en el directorio actual que se ajusta al "*.Patrón Py ".

importar global, fnmatch
para archivos_names en (global.Glob ('*.*')):
if (fnmatch.fnmatch (files_names, "*.py ")):
imprimir (archivos_names)

A continuación puede averiguar que los archivos que coinciden con el patrón se recuperan y enumeran con éxito.

Ejemplo 3:

Ahora, discutiremos la función fnmatchcase () de fnmatch. Si la cadena del nombre de archivo coincide con la cadena de patrón definida, esta función realiza una comparación (sensible a la caja en este escenario) y devuelve un valor booleano. El valor es verdadero o falso. Independientemente de la configuración del sistema de archivos o del sistema operativo, puede encontrar el código de programa para una comparación sensible al caso aquí.

Después de importar el módulo FNMatch y OS, hemos definido el patrón (indicado como Patrn en el código) en el que se basa nuestra búsqueda en. Luego hemos enumerado todos los archivos y los valores booleanos si el archivo coincide con el patrón.

importar fnmatch
importar sistema operativo
Patrn = 'fnmatch_*.Py '
Imprimir ('Patrón:', Patrn)
imprimir()
file_name = OS.ListDir ('.')
Para el nombre en file_name:
(Imprimir ('Nombre del archivo: %-25s %s' %(nombre, fnmatch.fnmatchcase (nombre, patrn))))

A continuación puede encontrar la salida y, como puede ver, todos los archivos devuelven falso.

Ejemplo 4:

En otro ejemplo de fnmatchcase mencionado a continuación, todos los archivos que comienzan con la letra 'h' y la extensión '.Py 'se recopilan por primera vez en un objeto de lista de archivos. El método fnmatch () se usa para obtener solo nombres que comienzan con las letras 'H.'

importar global, fnmatch
Archivos = Glob.Glob ("H*.*")
archivos
['datos.txt ',' demo.txt ',' Historia.Py ',' History_internal.py ',' new_file.txt ',' pdb_history.sqlite ',]
Para el archivo en archivos:
Si fnmatch.fnmatchcase (archivo, "H*.*") == Verdadero:
Imprimir archivo)

A continuación, el historial de archivos.Py e History_internal.PY se muestran en la captura de pantalla a medida que coinciden con el patrón definido.

Ejemplo 5:

Ahora hablaremos sobre la función de filtro del módulo fnmatch. Este método devuelve el subconjunto de la lista de nombres que coinciden exactamente con el patrón proporcionado de los nombres de pila. Aquí puede filtrar fácilmente los archivos no solo uno sino por muchas extensiones de archivos. Examine el código a continuación.

Aquí hemos importado los módulos requeridos primero y definimos el patrón. Después de eso, enumere todos los archivos que coincidan con los criterios.

importar fnmatch
importar sistema operativo
Patrn = 'fnmatch_*.py '
Imprimir ('El patrón es:', Patrn)
file_name = OS.ListDir ('.')
imprimir ('Los archivos se mencionan aquí:', file_name)
Imprimir ('Matches encontrado:', fnmatch.Filtro (file_name, Patrn))

Aquí, puede observar que el patrón se muestra primero, y luego los archivos se obtienen y se muestran. Por último, las coincidencias se muestran si se encuentran. En nuestro caso, no se encuentra ningún partido.

Ejemplo 6:

Otro programa elabora la función de filtro. Aquí solo aquellos archivos cuyos nombres coinciden con el parámetro del patrón son devueltos por esta función. De todos los archivos en el directorio actual, la siguiente declaración ofrece una lista de archivos con el '.extensión de txt '.

importar fnmatch
archivos = ['datos.txt ',' demo.txt ',' Historia.Py ',' History_internal.py ',' new_file.txt ',' pdb_history.sqlite ',]
imprimir (fnmatch.Filtro (archivos, "*.TXT"))

Aquí están los nombres de los archivos con el '.extensión de txt '.

Ejemplo 7:

La función traducir () del módulo fnmatch se demuestra en este ejemplo. Esta función convierte un patrón de estilo shell en una expresión regular que se puede usar con RE.Match () (RE.Match () Solo coincide al comienzo del texto, no cada línea). Hemos importado los módulos FNMatch y RE, como puede ver en el código a continuación. El patrón se transformó luego en una expresión regular utilizando el método traduce ().

importar fnmatch, RE
reg_exp = fnmatch.traducir('*.TXT')
re_obj = re.compilar (reg_exp)
Imprimir (Reg_EXP)
imprimir (re_obj.Partido ('demostración.TXT'))

Aquí puede ver la salida del programa de código de método traducido () ejecutado anteriormente.

Ejemplo 8:

Aquí hay otro ejemplo de la misma función discutida anteriormente. Después de importar los módulos requeridos, hemos ejecutado la función de traducción en la que hemos pasado el patrón que hemos definido en la línea de código anterior. El valor de retorno de la función se transforma en una expresión regular utilizando la función compile () re () re (). Después de eso, se usa para que coincida con el patrón dado.

importar
importar fnmatch
Glob de importación
Patrn = "*.TXT"
reg_exp = fnmatch.Traducir (Patrn)
reg_EXP
'(?s:.*\\.txt) \\ z '
Res = RE.compilar (reg_exp)
para file_name en el globo.Glob ("*.*"):
Si.Match (res, file_name):
print (file_name)

Aquí está el resultado cuando hemos ejecutado el programa anterior.

Conclusión:

La función fnmatch () puede coincidir entre un método de cadena simple y una expresión regular compleja. Por lo general, es un esquema razonable cuando solo se requiere un comodín simple para procesar datos. Hemos elaborado varios ejemplos para cubrir este tema en detalle.