IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Recherche de motif dans une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Par défaut Recherche de motif dans une liste
    Bonjour,
    Je vais tenter d'expliciter mon problème clairement.
    J'élabore un script qui dans une boucle me fournis une liste.
    Cette liste à un nombre variable d'éléments mais certains points sont constant; le premier est toujours un identifiant, les autres éléments sont de 5 types;
    Soit un caractère suivis d'un espace et d'un nombre (ex: A 12) soit 2 caractères/espace/nombre (AP 45) ...soit 5 caractères/espace/nombre
    (ex: APLKS 4)
    Parfois dans la liste je vais avoir 2 éléments à un seul caractère, parfois j'en aurais aucun à un caractère mais un/plusieurs à 2 (ou plus) caractères.
    Ce que je veux c'est que mon ensemble de liste issue de la boucle et écrite dans un fichier ai le même nombre d'éléments; le premier pour l'ID, le second pour le ou les éléments à un caractère le 5eme pour le ou les éléments à 5 caractères.
    J'ai donc tenté dans tout les sens des boucles avec "liste[i].startswith("\w\w\s")

    Ou bien faire 5 motifs de ce type; motif1="(\w\s{1}\\1{1,})"
    motif2="(\w...

    et boucler avec re.search(motif1;liste[i]) mais rien n'y fait;j'ai tester les motifs avec ce que je connaissais; les "." les "\w" les "\s" je n'ai pas réussi à obtenir ce que je veux, soit tout les éléments match avec le motif1 soit aucun ne match.

    Voilà je débute, donc je pense qu'il s'agit juste d'un soucis de syntaxe dans mes motifs mais je n'y arrive vraiment pas donc si quelqu'un à une piste pour me débloquer sa serait bien aimable.

    Merci à vous et si vous avez besoins de précisions n'hésitez pas!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Hello, bienvenue sur le forum Python,



    Ça commence bien et malheureusement je ne comprends plus a partir de
    Ce que je veux c'est que mon ensemble de liste issue de la boucle et écrite dans un fichier ai le même nombre d'éléments; le premier pour l'ID, le second pour le ou les éléments à un caractère le 5eme pour le ou les éléments à 5 caractères.

    Jusqu’à cet endroit, je pensais qu’il n’y avait qu’une seule liste, produite par plusieurs tours d’une boucle exécutée une seule fois (utilisation de append ou extend à chaque tour, boucle = série de plusieurs append ou extend)



    Y a-t-il en fait plusieurs listes ?

    Soit produites par plusieurs exécutions de la même boucle (répétitions de séries de plusieurs append ou extend),

    soit chaque liste produite par un seul tour (procédé à préciser) ?





    Pour moi, «un ensemble doit avoir le même nombre» ne signifie rien. Ce doit être suivi de «que» et d’un deuxième terme qui précise avec quel autre ensemble est comparé le premier.







    startswith() est une méthode de chaîne, pas de liste



    les fonctions de regex ont aussi des arguments chaînes
    Dans re.search(motif1,x) x doit être une chaîne. Et un point-virgule






    Tu veux obtenir 5 listes dont chacune ne comporte des éléments que d’un seul type ?

    Précise stp.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Par défaut
    Ok je précise tout sa

    Je parcours un fichier texte
    J'ai une boucle for qui remplie une liste, une fois que la boucle est terminé et la liste complète elle est inscrite dans un autre fichier, la boucle reprend et la liste est remplis avec de nouvelles donnée (il y a donc une seule liste qui est formée puis réinitialiser à liste vide a chaque passage dans la boucle)

    Moi je voudrais avant d'inscrire dans mon fichier de sortie ma liste qui sort de la boucle, la remanier.
    Et je veux que toute les listes qui sortent (que j'inscrit dans mon fichier de sortie) possèdent le même nombre d'éléments c'est à dire 6: le premier liste[0] c'est l'identifiant, liste[1] c'est le ou les éléments du type un caractère/espace/nombre (si il y'en a plusieurs je les met à la suite c'est pas grave il faut que sa soit dans le même élément) ainsi de suite jusqu'à liste[5]. Si jamais il n'y a pas dans la liste d'élément du type 2 caractère/espace/nombre et bien liste[2] sera malgrès tout présent avec une chaine de caractère du style "inexistant" dedans.

    La boucle qui me sort les listes (dans mon fichier texte) fonctionne parfaitement j'ai juste un souci au niveau du remaniement de la liste avant de finir le passage dans la boucle pour l'écrire dans mon fichier de sortie avec mon histoire de motif

    (J'utilise startswith et re.search au sein d'une nouvelle boucle avec les liste[i] qui sont des chaines de caractères.)


    Exemple; a la fin de ma boucle ma liste est sous cette forme:
    liste=['Identifiant', 'A 45', 'P 12', 'AA 74', 'MLKJO 2','K 30']
    Je veux la remanier pour pouvoir l'inscrire dans mon fichier sous cette forme:
    liste=['Identifiant', 'A45 P 12 K 30', 'AA 74', 'Inexistant', 'Inexistant', 'MLKJO 2']

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Par défaut
    Si tu nous donne pas ta boucle, on pourra pas être beaucoup plus précis

    A la mano, j'obtiens a priori le résultat attendu (j'ai pas tout compris en fait !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    liste=['Identifiant', 'A 45', 'P 12', 'AA 74', 'MLKJO 2','K 30']
    liste_temp = []
    liste_temp.append(liste[0])
    liste_temp.append(liste[1].replace(' ','') + " " + liste[2] + " " + liste[-1])
    liste_temp.append(liste[3])
    liste_temp.append("inexistant")
    liste_temp.append("inexistant")
    liste_temp.append(liste[-2])
    print liste_temp
    Je suis ravi d'avoir essayé de t'aider
    Bienvenue parmi nous

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Par défaut
    Oui sa marche pour l'exemple, mais il faut que je trouve un moyen pour réarrangé la liste de manière automatique après qu'elle soient généré par la boucle. Lors du passage suivant dans la boucle j'obtiendrais une liste différente (y'aura pas d'élément à un caractère par exemple), donc il faut je pense définir des motif qui vont matché avec chaque liste[i]

    Je vais avoir dans mon fichier de sortie un millier de ligne (à la louche, on va pas chipoter) sur chaque ligne sera écrit la liste qui a fait son passage dans la boucle, chacune sera différente mais il faut qu'elle ai toute le même format pour que je puisse faire quelque chose du fichier de sortie. (Base de donnée et tout le bazar )

    Je crains que si je vous montre le code monstrueux sa ne vous embrouille encore plus (si si je vous assure )

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Par défaut
    Citation Envoyé par Antwan76ers Voir le message
    Je crains que si je vous montre le code monstrueux sa ne vous embrouille encore plus (si si je vous assure )
    Aller courage mets le ton code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. la recherche de clé dans une liste en POO
    Par wafiwafi dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 20/08/2009, 15h50
  2. Réponses: 3
    Dernier message: 03/11/2008, 10h09
  3. Supprimer motif dans une liste
    Par Betty.m dans le forum Macro
    Réponses: 8
    Dernier message: 19/06/2008, 17h26
  4. recherche par attribut dans une liste d'objet
    Par Jacobian dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 28/05/2008, 21h11
  5. recherche de valeur dans une liste lag lead
    Par fatsora dans le forum Oracle
    Réponses: 1
    Dernier message: 31/01/2008, 08h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo