Partage
  • Partager sur Facebook
  • Partager sur Twitter

Doublon avec fonction de listing

"Ouate de phoque"

Sujet résolu
    20 décembre 2014 à 18:09:30

    Salut, me revoilà :)

    J'ai un problème totalement incompréhensible suite à cette fonction : 

    	def listing(self, chemin, filtre):
    		'''chemin -> str
    		filtre -> str -> Valeurs : 'dossier', 'fichier', 'tout'
    		Retourne une liste de noms de dossiers ou de noms de fichiers, ou les deux.
    		'''
    		if not os.path.exists(chemin):
    			raise IOError("Le chemin spécifié n'existe pas.")
    		if filtre != 'dossier' and filtre != 'fichier' and filtre != 'tout':
    			raise ValueError("Le filtre spécifié n'existe pas.")
    
    		listeDossier = listeFichier = listeTout = list()
    
    		os.chdir(chemin)
    
    		for n in os.listdir(chemin):
    			listeTout.append(n)
    			if os.path.isfile(n):
    				listeFichier.append(n)
    			elif os.path.isdir(n):
    				listeDossier.append(n)
    
    		os.chdir(self.repcur)
    
    		if filtre == 'tout':
    			return listeTout
    		elif filtre == 'fichier':
    			return listeFichier
    		elif filtre == 'dossier':
    			return listeDossier
    if __name__ == '__main__':
    	reload(sys)
    	sys.setdefaultencoding('utf-8')
    	module = MonModule()
    
    	print module.listing('C:/Users/Christophe/Pictures/Pellicule', 'fichier')

    Qui me renvoie :  

    ['sallerino.png', 'sallerino.png', 'Screenshot_2013-12-24-01-37-15.png', 'Screenshot_2013-12-24-01-37-15.png', 'Thumbs.db', 'Thumbs.db']
    [Finished in 0.1s]

    Soit un doublon des fichiers présents...... Je n'y comprends rien. J'ai pourtant quasiment la même fonction dans un autre code mais qui fonctionne tout à fait correctement -_-.

    Merci :)



    -
    Edité par InhumanRampage 20 décembre 2014 à 18:10:48

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      20 décembre 2014 à 18:36:29

      C'est parce que la liste est un objet muable (il est modifiable, à l'inverse d'une str ou d'un int). Ton erreur vient du fait que listeTout, listeDossier et listeFichier sont en réalité les mêmes listes !

      Pour pallier à ce problème il te suffit de créer les listes séparément, par exemple listeTout, listeDossier, listeFichier = [], [], []. Je tombe tout le temps dans le même panneau que toi :D

      -
      Edité par Anonyme 20 décembre 2014 à 18:37:01

      • Partager sur Facebook
      • Partager sur Twitter
        20 décembre 2014 à 19:34:54

        Mon sauveur, merci :D 

        Je devenais dingue à pas comprendre pourquoi ça ne fonctionnait pas ><

        Par contre si je fais l'affectation que tu m'as donné ça créé des tuples et je ne peux pas faire d'append dessus :D

        Je suis donc retourné à l'inscription classique de :

        liste 1 = list()

        liste 2 = list()

        Moi qui voulait avoir un code plus "pro", je me suis fait avoir :(

        -
        Edité par InhumanRampage 20 décembre 2014 à 19:35:25

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 décembre 2014 à 19:52:37

          Par contre si je fais l'affectation que tu m'as donné ça créé des tuples et je ne peux pas faire d'append dessus :D

          Chez moi ça marche, c'est peut être parce que tu es en Python 2

          • Partager sur Facebook
          • Partager sur Twitter

          Doublon avec fonction de listing

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown