Python fnMatch

Python fnMatch

Ao trabalhar com arquivos e sistemas de arquivos, é comum pesquisar em muitos arquivos para descobrir um determinado arquivo. Encontrar os arquivos necessários de muitos arquivos levará uma eternidade se feita manualmente. Como resultado, sistemas operacionais e linguagens de programação incluem instalações para localizar dinamicamente os arquivos necessários. Esses utilitários geralmente segmentam nomes de arquivos e usam a correspondência de padrões para tentar localizar os arquivos relevantes.

A biblioteca FNMATCH na linguagem de programação Python pode ser usada para localizar arquivos em sistemas operacionais baseados em UNIX, como MacOS e Linux. Este artigo usa o módulo FNMATCH no Python para fazer correspondência de padrões.

O que é fnMatch?

É um pacote Python comum para combinar curingas como os usados ​​em conchas Unix. Se um único nome de arquivo corresponder a um padrão, o fnmatch () retornará true; Caso contrário, ele retorna falso.

Funções fornecidas pelo módulo FNMATCH

O módulo fnmatch contém as funções fnmatch (), fnmatchcase (), filter () e translate (). Exemplo de programas que demonstram cada função em profundidade podem ser encontrados abaixo.

Exemplo 1:

Este é o primeiro de vários exemplos em nosso artigo sobre o método fnmatch (). Se o nome fornecido do arquivo corresponder à sequência de padrões, o método FnMatch () executado retornará um valor booleano. Se o sistema operacional for insensível a minúsculas, a comparação ocorrerá após os dois parâmetros terem sido normalizados para todos.

Aqui está um programa; Primeiro, importamos o módulo FNMATCH e OS. Depois disso, procuramos todos os arquivos que começam com 'fnmatch' e terminamos com '.py '. Por fim, imprima o resultado, como você pode ver na última linha de código.

importar fnMatch
OS de importação
patn = 'fnmatch_*.py '
print ('o padrão é', patn)
imprimir()
file_name = os.ListDir ('.')
para nome em file_name:
print ('nome do arquivo: %-25s %s' %(nome, fnmatch.fnmatch (nome, patn)))

Aqui na saída, você pode ver que o padrão e os arquivos que correspondem ao padrão estão listados.

Exemplo 2:

Mais um exemplo elabora a função fnmatch. Esta função requer o nome do arquivo e um padrão de string de caracteres. O nome do arquivo é comparado ao padrão, e o método retorna verdadeiro ou falso.

No exemplo abaixo, importamos os módulos Glob e FNMatch necessários para que este programa seja executado. Depois disso, compilamos uma lista de todos os arquivos presentes no diretório atual que se encaixam no “*.padrão py ”.

Importar glob, fnmatch
para files_names em (glob.glob ('*.*')):
if (fnMatch.fnmatch (files_names, "*.py ")):
imprimir (files_names)

Abaixo, você pode descobrir que os arquivos que correspondem ao padrão são recuperados e listados com sucesso.

Exemplo 3:

Agora, discutiremos a função fnmatchCase () de fnmatch. Se a string de nome do arquivo corresponder à sequência de padrões definida, esta função executará uma comparação (sensível ao caso nesse cenário) e retornará um valor booleano. O valor é verdadeiro ou falso. Independentemente do sistema de arquivos ou das configurações do sistema operacional, você pode encontrar o código do programa para uma comparação sensível ao caso aqui.

Depois de importar o módulo FNMatch e OS, definimos o padrão (indicado como patnn no código) no qual nossa pesquisa é baseada. Então listamos todos os arquivos e os valores booleanos se o arquivo corresponder ao padrão.

importar fnMatch
OS de importação
patn = 'fnmatch_*.Py '
Print ('padrão:', patn)
imprimir()
file_name = os.ListDir ('.')
para nome em file_name:
(print ('nome do arquivo: %-25s %s' %(nome, fnmatch.fnMatchCase (nome, patn))))

Abaixo, você pode encontrar a saída e, como pode ver, todos os arquivos retornam false.

Exemplo 4:

Em outro exemplo de FNMatchCase mencionado abaixo, todos os arquivos começando com a letra 'H' e a extensão '.Py 'são coletados pela primeira vez em um objeto de lista de arquivos. O método fnmatch () é usado para produzir apenas nomes que começam com as letras 'H.'

Importar glob, fnmatch
arquivos = glob.glob ("h*.*")
arquivos
['dados.txt ',' demonstração.txt ',' História.py ',' History_internal.py ',' new_file.txt ',' pdb_history.sqlite ',]
para arquivo em arquivos:
se fnmatch.fnmatchCase (arquivo, "h*.*") == true:
imprimir arquivo)

Abaixo, o histórico de arquivos.py e history_internal.Py são exibidos na captura de tela enquanto correspondem ao padrão definido.

Exemplo 5:

Agora vamos falar sobre a função de filtro do módulo FNMATCH. Este método retorna o subconjunto da lista de nomes que correspondem exatamente ao padrão fornecido dos nomes fornecidos. Aqui você pode filtrar facilmente arquivos não apenas um, mas por muitas extensões de arquivo. Examine o código abaixo.

Aqui importamos os módulos necessários primeiro e definimos o padrão. Depois disso, liste todos os arquivos que correspondem aos critérios.

importar fnMatch
OS de importação
patn = 'fnmatch_*.py '
Imprimir ('padrão é:', patn)
file_name = os.ListDir ('.')
Print ('Os arquivos são mencionados aqui:', file_name)
impressão ('correspondências encontradas:', fnmatch.filtro (file_name, patn))

Aqui, você pode observar que o padrão é exibido primeiro e depois os arquivos são buscados e exibidos. Por fim, as correspondências são exibidas se encontradas. No nosso caso, nenhuma correspondência é encontrada.

Exemplo 6:

Outro programa elabora a função de filtro. Aqui apenas os arquivos cujos nomes correspondem ao parâmetro padrão são retornados por esta função. De todos os arquivos no diretório atual, a seguinte declaração fornece uma lista de arquivos com o '.Extensão txt '.

importar fnMatch
arquivos = ['dados.txt ',' demonstração.txt ',' História.py ',' History_internal.py ',' new_file.txt ',' pdb_history.sqlite ',]
Imprimir (fnMatch.filtro (arquivos, "*.TXT"))

Aqui estão os nomes dos arquivos com o '.Extensão txt '.

Exemplo 7:

A função traduzente () do módulo fnmatch é demonstrada neste exemplo. Esta função converte um padrão de estilo de casca em uma expressão regular que pode ser usada com re.Match () (Re.Match () corresponde apenas ao início do texto, não a cada linha). Importamos os módulos FNMATCH e RE. O padrão foi então transformado em uma expressão regular usando o método translate ().

importar fnmatch, re
reg_exp = fnmatch.traduzir('*.TXT')
re_obj = re.compilar (reg_exp)
impressão (reg_exp)
Imprimir (re_obj.Match ('Demo.TXT'))

Aqui você pode ver a saída do Programa de Código de Método Translate () Extrate () acima acima.

Exemplo 8:

Aqui está outro exemplo da mesma função discutida acima. Depois de importar os módulos necessários, executamos a função de tradução na qual passamos o padrão que definimos na linha de código acima. O valor de retorno da função é então transformado em uma expressão regular usando a função compile () do módulo RE. Depois disso, é usado para corresponder ao padrão fornecido.

importar re
importar fnMatch
Glob de importação
patn = "*.TXT"
reg_exp = fnmatch.Traduzir (patn)
reg_exp
'(?s:.*\\.txt) \\ z '
res = re.compilar (reg_exp)
para file_name em glob.glob ("*.*"):
se re.Match (res, file_name):
imprimir (file_name)

Aqui está o resultado quando executamos o programa acima.

Conclusão:

A função fnmatch () pode corresponder a um método simples de string e uma expressão regular complexa. Geralmente é um esquema razoável quando apenas um simples curinga é necessário para processar dados. Elaboramos vários exemplos para cobrir este tópico em detalhes.