Python - 1 ligne de code

Fermé
LsBender - 20 juil. 2012 à 11:31
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 20 juil. 2012 à 21:17
Bonjour,

Je reprends un programme codé en python qui modifie des fichiers .txt de logs

J'ai beau essayer j'arrive pas à comprendre ce que fait cette ligne:


log = re.compile("(?P<date>.*)-(?P<time>.*)\|(?P<sourcefile>.*)\|(?P<linenb>.*)\|(?P<swmodule>.*)\|(?P<tracelevel>.*)\|(?P<description>.*)\|")


Merci d'avance pour votre aide!

A voir également:

1 réponse

heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
20 juil. 2012 à 21:17
Elle crée la représentation compilée d'un motif d'expression régulière.

Ce motif permet d'attraper 7 portions de chaînes: la première et la seconde doivent être séparées par un tiret dans le texte, les 5 autres doivent être chacune située entre deux caractères '|'

Etant donné l'absence de '?' après toutes les étoiles, les 5 chaînes entre caractères '|' sont les plus au bout vers la fin du texte analysé.
De même , le tiret qui sépare les deux premières portions est celui le plus vers la fin du texte, les conditions sur les autres portions devant être respectées.

L'écriture (?P....) permet de définir un groupe nommé, c'est à dire qu'on pourra appeler la portion de chaîne captée par le group en question par un nom au lieu de seulement par un numéro. Il faut lire la doc.

Amuse toi à mettre des '?' après les étoiles et observe les modifications de résultat.


Sera plus clair avec des exmples:

import re

log = re.compile("(?P<date>.*)-(?P<time>.*)\|"
                 "(?P<sourcefile>.*)\|"
                 "(?P<linenb>.*)\|"
                 "(?P<swmodule>.*)\|"
                 "(?P<tracelevel>.*)\|"
                 "(?P<description>.*)\|")

ss = '12345|4578|54127|abcd-ef-gh|sourci|linini|modudu|trac|descriptu|finini'
print log.search(ss).groups()

ss = '12345|4578|54127|abcd-ef-gh|sourci|linini|modu-du|trac|descr-iptu|ALAFIN'
print log.search(ss).groups()

print
print log.search(ss).group('description')</code>
donne

('12345|4578|54127|abcd-ef', 'gh', 'sourci', 'linini', 'modudu', 'trac', 'descriptu')

('12345|4578|54127|abcd-ef', 'gh', 'sourci', 'linini', 'modu-du', 'trac', 'descr-iptu')

descr-iptu
2