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 :

os.walk ne me trouve pas tous les répertoires ?


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 43
    Par défaut os.walk ne me trouve pas tous les répertoires ?
    bonjour,

    j'ai un problème avec os.walk. quand je suis dans le dossier parent il m'oublie des sous dossiers qui sont présent. mais par contre il passe bien par ce sous dossier plus tard. La ou ca coince c'est que je supprime certain dossier qui ne sont pas a traité. j'ai l'impression d'être hyper clair

    avec un petit ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    ignore = shutil.ignore_patterns( "_notes", "old", "upload", "TEST", "test", "themes", "script", ".conf", "*~", "copie*", "*.lck", "*.bak" ) 
     
    for root, dirs, files in os.walk( rootdir ):
        logging.debug( "consumes : " + root )
     
        # c'est un répertoire accepté, on le copie
        website.copy_to_repository( REPOSITORY, root )
     
        # on vérifie si il faut analyser les sous dossiers
        ignored_names = ignore( root, dirs )
        for aDir in dirs:
            if aDir in ignored_names:
                dirs.remove( aDir )    
     
        # on vérifie si il faut copier les fichiers
        ignored_names = ignore( root, files )
        for aFile in files:
            if (aFile in ignored_names) == False:
                website.copy_to_repository( REPOSITORY, root, aFile )
    je cale un peu. mes répertoires oubliés n'on à priori rien de spécial.
    je fais du python depuis 2 jours donc j'ai peu être fait une boulette.
    Je suis sous windows xp, avec python 2.6.2

    merci d'avance, Julien C.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je viens de refaire le calcul avec une autre méthode que os.walk (avec os.listdir et une fonction récursive), et je retrouve exactement le même nombre de fichiers et de répertoires sur plusieurs arborescences complexes (dont "C:\Python26"). Ceci sous Vista et Python 2.6.2.

    Regarde plutôt du côté de ton mécanisme de sélection/exclusion. Je ne l'ai pas bien compris, mais vérifie l'absence de mélange entre fichiers et répertoires.

    Si tu ne trouves pas, redonne ici un code qui a le défaut, mais suffisamment complet pour qu'on puisse l'essayer avec un simple copier-coller.

    Tyrtamos

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 43
    Par défaut
    effectivement, ca me sort la même liste de dossiers et fichiers.

    mon problème vient de la suppression des répertoires que je ne veux pas analyser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        for aDir in dirs:
            if aDir in ignored_names:
                dirs.remove( aDir )
    il apprécie pas que je parcours la liste et que je supprime au fur et à mesure. sur un petit exemple test ça fonctionne si je fais les suppressions après mon for.

    sinon pour filtrer mes fichiers je me suis servie d'un exemple de la doc de python : http://docs.python.org/library/shutil.html#example

    Merci. Julien.

  4. #4
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par jc63 Voir le message
    il apprécie pas que je parcours la liste et que je supprime au fur et à mesure. sur un petit exemple test ça fonctionne si je fais les suppressions après mon for.
    Tous les langages existants t'enverront balader si tu change la taille d'une liste pendant que tu fais une itération dessus.

    La seule solution à ça, c'est de créer une autre liste qui contiendra tous les répertoires à analyser.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 43
    Par défaut
    je maitrise pas encore trés bien les collections python list, set ca doit pouvoir ce faire si on parcours la liste de la fin au début.

    mais là effectivement je me suis servi de 2 listes.

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

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. Réponses: 1
    Dernier message: 26/10/2006, 17h44
  3. Réponses: 2
    Dernier message: 25/09/2006, 13h04
  4. Les Langages ne sont pas tous les mêmes ......
    Par Max Payne dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/08/2003, 13h51

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