Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Expression régulière

Expression régulière

Remonter à Forum général Python
  • Expression régulière

    Envoyé par manfire le 25 Mai 2010 à 00:17
    Bonjour,


    Je suis débutant en python et mon problème consiste de traité un flux de données avec une structure bien définit et de renvoyé le résultat sur un fichié csv et voici l'exemple







    mon objectif c'est d'extraite des données de cette chaine et de l'ecrire sur un fichier csv sur cette forme

    Résultat:

    Zureti Fabrice;ONEWAY;Comptabte;101;10032010;0810;1815;013


    Merci pour votre aide
    • Re: Expression régulière

      Envoyé par jacko le 25 Mai 2010 à 17:34
      Si on comprend bien : dans la ligne lue, le champ "value" est formé de 19 termes séparés par "|". Vous voulez récupérer seulement les termes de rang 1, 4 à 7, 9, 10 et 18. Il y a plusieurs façon de faire ; en voici une :
      On suppose que votre ligne se trouve dans la variable "source".

      import re
      champs=(1,4,5,6,7,9,10,18)
      # la liste des champs à extraire.
      v=re.sub(r'.*value="(.*)".*',r'\1',source)
      # extrait la chaîne sous "value"
      # v='Zureti.....|013|2'
      pat=r'([^|]*)\|'*19
      pat=pat[:-2]
      # on construit l'expression régulière
      # matchant les 19 termes.
      # pat='([^|]*)\|([^|]*).....|([^|]*)'
      e=re.match(pat,v)
      print ";".join(e.group(*champs))

    • Re: Expression régulière

      Envoyé par jice le 26 Mai 2010 à 08:43
      Pour ma part, j'utiliserais plutôt split() pour obtenir ce résultat (cela dit, par expressions régulières, c'est très bien aussi).

      data=''

      # Version développée
      champs=(0,3,4,5,6,8,9,17)
      value=data.split('"')[-2]
      values=value.split("|")
      interesting_values= [ ]
      for i in champs:
      interesting_values.append(values[ i])
      csv_line=";".join(interesting_values)
      print csv_line

      # On peut (si on veut frimer un peu) obtenir le même résultat en une ligne grâce aux listes en intention
      csv_line=";".join([ value for i,value in enumerate(data.split('"')[-2].split("|" ) ) if i in (0,3,4,5,6,8,9,17)])
      print csv_line

Rendu par Ploneboard