English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Aquí, veremos cómo usar Python para obtener la técnica de coincidencia de patrones de shell de UNIX. Hay un nombrefnmatchmódulo, que se utiliza para completar el trabajo. Este módulo se utiliza para comparar el nombre del archivo con el patrón y luego devolver True o False según el resultado de la coincidencia.
Primero, necesitamos importarlofnmatchMódulo de biblioteca estándar.
import fnmatch
En el terminal Unix, hay algunos comodines que pueden coincidir con los patrones. Estos son los siguientes-
'*'* estrella se utiliza para coincidir con todo.
'?' pregunta se utiliza para coincidir con un solo carácter.
[seq] la secuencia se utiliza para coincidir con caracteres en la secuencia
[!seq] no está en la secuencia se utiliza para coincidir con caracteres que no existen en la secuencia.
Si queremos buscar asteriscos o preguntas como caracteres, debemos usarlos de esta manera: [*] o [?]
fnmatch()
métodoElfnmatch()
El método tiene dos parámetros, que son el nombre del archivo y el patrón. Esta función se utiliza para verificar si el nombre del archivo coincide con el patrón dado. Si el sistema operativo distingue entre mayúsculas y minúsculas, los parámetros se estandarizarán a mayúsculas o minúsculas antes de la coincidencia.
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files) for filename in files: print('Archivo: {}\t: {}'.format(filename, fnmatch.fnmatch(filename, file_pattern)))
Resultado de salida
$ python3 310.UNIX_filename.py Archivo: test_file5.txt: True Archivo: test_file2.png: Verdadero Archivo: test_file1.txt: True Archivo: another_file.txt: Falso Archivo: TEST_FILE4.txt: Falso Archivo: abc.txt: Falso Archivo: test_file3.txt: True $
filter()
métodoElfilter()
El método también tiene dos parámetros. El primero es el nombre, y el segundo es el patrón. Este patrón encuentra la lista de nombres de archivo coincidentes en la lista de todos los nombres de archivo.
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files) match_file = fnmatch.filter(files, file_pattern) print('Todos los archivos:') + str(files)) print('\nArchivos coincidentes:') + str(match_file))
Resultado de salida
$ python3 310.UNIX_filename.py Todos los archivos:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'otro_archivo.txt', 'TEST_FILE4.txt', 'abc.txt', 'test_file3.txt' Archivos coincidentes:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'test_file3.txt' $
translate()
métodoEltranslate()
El método toma un parámetro. Este parámetro es un patrón. Podemos usar esta función para convertir un patrón de estilo de shell en otro patrón para que podamos usar expresiones regulares en Python para coincidir.
import fnmatch, re file_pattern = 'test_f*.txt' unix_regex = fnmatch.translate(file_pattern) regex_object = re.compile(unix_regex) print('Expresión regular:') + str(unix_regex)) print('Objeto de coincidencia:') + str(regex_object.match('test_file_abcd123.txt')))
Resultado de salida
$ python3 310.UNIX_filename.py Expresión regular:(?s:test_f.*\.txt)\Z Objeto de coincidencia: <_sre.SRE_Match objeto; span=(0, 21), match='test_file_abcd123.txt'> $