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 doublon dans liste


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut recherche doublon dans liste
    Bonjour,
    j'ai une liste qui represénte un indexage fichiers.
    Celle-ci est du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    list=[file1|path1,file1|path2,file2|path3,file3|path4,file5|path5,file5|path6]
    J'aimerais trouver et supprimer les doublons sur les file (ex: ici supprimer 'file1|path2','file5|path6')
    Mais cette liste n'est pas de type dictionnaire puisque dans chaque entrée j'ai à la fois l'information de fichier + path

    Quelqu'un aurait une idée de comment procéder ?

    D'avance merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 1 024
    Points : 1 311
    Points
    1 311
    Par défaut
    c'est quoi ces | ?

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par josmiley Voir le message
    c'est quoi ces | ?
    Ce sont des "pipes", caractères de séparations

  4. #4
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    J'avoue que comme josmiley l'usage des '|' m'interpelle... Ne pourrais tu pas stocker les noms complets et les splitter quand tu en as besoin avec les fonctions os prévues pour ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import os
    import sys
     
    list = ['c:/toto/titi/fname1.bin',
        'c:/toto/titi/fname2.bin',
        'c:/toto/titi/fname1.bin',
        'c:/toto/toto/fname1.bin',
        'c:/tutu/tata/fname1.bin']
     
    for filename in list:
        dirname = os.path.dirname(filename)
        fname = os.path.basename(filename)
        sys.stdout.write( 'path : "%s" fname : "%s"\n'%(dirname, fname))
    A+

    Pfeuh

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    Salut,

    J'avoue que comme josmiley l'usage des '|' m'interpelle... Ne pourrais tu pas stocker les noms complets et les splitter quand tu en as besoin avec les fonctions os prévues pour ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import os
    import sys
     
    list = ['c:/toto/titi/fname1.bin',
        'c:/toto/titi/fname2.bin',
        'c:/toto/titi/fname1.bin',
        'c:/toto/toto/fname1.bin',
        'c:/tutu/tata/fname1.bin']
     
    for filename in list:
        dirname = os.path.dirname(filename)
        fname = os.path.basename(filename)
        sys.stdout.write( 'path : "%s" fname : "%s"\n'%(dirname, fname))
    A+

    Pfeuh
    Cette liste permet de générer un fichier 'txt' qui permet l'indexation de milliers de fichiers.
    Ce fichier texte est ensuite repris par un autre programme qui le parse.. je ne peux donc pas le modifier ...
    Je pensais passer passer par des expressions régulières pour mon histoire de doublons, en faisant quelque chose du type, sachant que ma liste est ordonnée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for i in range(1, len(list)-1):
                line=list[i]
                myLineSplitted=line.split('|')
                logger.debug('1st loop - myLineSplitted: {0}'.format(myLineSplitted[0]))
                #logger.debug('i: {0}'.format(i))
     
                if re.search(myLineSplitted[0],list[i+1]):                
                    todel+=str(i)+":"
    logger.debug(todel)
     
    del list[todel]

    Mais c'est pas top ... suis sur que Python possède des fonctions plus puissantes au niveau structure de données..

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    J'ai finalement procédé ainsi:
    -liste temporaire permettant de stocker les noms de fichiers
    -suppression des doublons de cette liste (via un 'not in' )
    -comparaison de cette liste à l'initiale pour ne garder que les entrées correspondantes

    -> Usine à gaz mais ça marche

    Merci pour votre aide

  7. #7
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Concernant les pipes, rien ne t'empêche de réorganiser ta liste dans un dico, du type :
    dico{fichier1:[path1, path2, ...]}

    A la lecture de ton fichier, tu remplis à mesure ton dictionnaire.

    Ensuite, tu obtiens ton dictionnaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dico = {file1:[path1, path2], file2:[path3], file3:[path4], file5:[path5, path6]}
    Ainsi, tu n'as plus qu'à regarder pour chaque fichier si la liste de path contient plus d'un élément.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for file, lpath in dico.items():
    	if len(lpath) > 1:
    		#n'en garder qu'un
    		...
    Ça irait ?
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par panda31 Voir le message
    Concernant les pipes, rien ne t'empêche de réorganiser ta liste dans un dico, du type :
    dico{fichier1:[path1, path2, ...]}

    A la lecture de ton fichier, tu remplis à mesure ton dictionnaire.

    Ensuite, tu obtiens ton dictionnaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dico = {file1:[path1, path2], file2:[path3], file3:[path4], file5:[path5, path6]}
    Ainsi, tu n'as plus qu'à regarder pour chaque fichier si la liste de path contient plus d'un élément.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for file, lpath in dico.items():
    	if len(lpath) > 1:
    		#n'en garder qu'un
    		...
    Ça irait ?
    Pas bête ami toulousain...

  9. #9
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par pingouinos_64 Voir le message
    Pas bête ami toulousain...
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  10. #10
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    À ce compte là, c’est encore plus simple de ne remplir le dico qu’une fois*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dico = {}
    for file, path in <generator>:
        if file not in dico:
            dico[file] = path
    Pas besoin de stocker les différents pathes dans une liste si on n’en veut qu’un au final, amha…

  11. #11
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Certes. Encore faudrait-il savoir ce que pingouinos_64 veut faire des doublons. S'il veut les supprimer dans les paths, il a peut-être un choix à faire.
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/02/2012, 18h30
  2. Recherche doublons sur list
    Par rumpeballe dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/08/2008, 23h54
  3. Access 2007 doublon dans liste deroulante
    Par jean- dans le forum IHM
    Réponses: 13
    Dernier message: 28/01/2008, 16h31
  4. Recherche etablissement dans Liste déroulante
    Par ypfr2000 dans le forum Access
    Réponses: 7
    Dernier message: 03/02/2007, 10h45
  5. doublons dans liste déroulante
    Par nicolovitch dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2006, 12h17

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