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.path.isdir et isfile


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut os.path.isdir et isfile
    Bonsoir,

    Avant de poser ma question, je voudrais dire que j'ai fait des recherches et... trouvé 10 fois la réponse à ma question !!
    (y compris dans ce même forum)

    Alors qu'est-ce que je fais ici ? ben , après avoir tout lu et essayé, j'en arrive à la conclusion que ... je n'y arrive pas.... et j'avoue ça avec un énorme déplaisir.
    Mais comme je suis à court d'idées, je viens poser une nouvelle fois cette question; il y a peut-être une faute que je ne vois pas dans mon code.

    Le problème: lister toutes les entrées d'un dossier, et différencier les fichiers des dossiers qu'il contient. Simple, non ?
    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
     
    #!/usr/bin/python3
    # -*- coding: cp1252 -*-
     
    import os.path
     
    DOSSIER_SOURCE="K:\\musique_test"
     
    dirs = os.listdir(DOSSIER_SOURCE)
    for file in dirs:
      print ("Nom : ",file)
      if os.path.isdir(file):
        print("Dossier: ",file)
      if os.path.isfile(file):
        print ("Fichier: ",file)
    Réponse obtenue:
    >d:\Applications\python32\pythonw -u "test1.py"
    Nom : dossier1
    Nom : dossier2
    Nom : Matt Bianco - Get Out Your Lazy Bed.wav
    Nom : Matt Bianco - Half a Minute.wav
    Nom : Matt Bianco - More Than I Can Bear.wav
    Nom : Matt Bianco - Whose Side Are You On-.wav
    >Exit code: 0
    On voit que toutes les entrées du dossier sont bien identifiées, mais aucune comme dossier, NI aucune comme fichier.

    Si quelqu'un a une petite idée, je suis preneur ! ;-) (même pas la peine d'aller plus loin dans mon application, si ceci coince !)

    Merci d'avance pour toute réponse,
    Michel

  2. #2
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Bonjour,
    Il faudrait regarder du coté de "os.walk"… La documentation est assez explicite.

    Clodion

    PS: le problème avec "isdir" est qu'il faut reconstruire le chemin complet…

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Bonsoir Clodion,

    Tout d'abord merci pour ta réponse rapide.
    J'avais eu cette idée aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/usr/bin/python3
    # -*- coding: cp1252 -*-
     
    import os.path
    DOSSIER_SOURCE="K:\\musique_test"
     
    for path, dirs, files in os.walk(DOSSIER_SOURCE):
        for filename in files:
            print("Fichier: ",filename)
     
        for filename in dirs:
            print("Dossier: ",filename)
    Réponse obtenue:
    d:\Applications\python32\pythonw -u "test2.py"
    Fichier: Matt Bianco - Get Out Your Lazy Bed.wav
    Fichier: Matt Bianco - Half a Minute.wav
    Fichier: Matt Bianco - More Than I Can Bear.wav
    Fichier: Matt Bianco - Whose Side Are You On-.wav
    Dossier: dossier1
    Dossier: dossier2
    On voit qu'ici, la distinction fichier/dossier s'effectue bien.... mais...

    1. il me faut 2 boucles pour traiter 2 listes séparées, ce que j'aurais bien voulu éviter, mais bon à la rigueur...
    et 2. ça ne répond tout de même pas à l'interrogation qui continue de me tarauder: qu'est-ce qui ne fonctionne pas dans le premier code ?
    Pourquoi os.isfile et os.isdir répondent-ils pas correctement ?

    D'autres idées ? d'avance merci
    Michel

  4. #4
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par mikeduff Voir le message
    On voit qu'ici, la distinction fichier/dossier s'effectue bien.... mais...

    1. il me faut 2 boucles pour traiter 2 listes séparées, ce que j'aurais bien voulu éviter, mais bon à la rigueur...
    et 2. ça ne répond tout de même pas à l'interrogation qui continue de me tarauder: qu'est-ce qui ne fonctionne pas dans le premier code ?
    Pourquoi os.isfile et os.isdir répondent-ils pas correctement ?

    D'autres idées ? d'avance merci
    Michel
    Bonsoir,
    Oui, c'est vrai.
    C'est pour cela que j'ai rajouté le PS…
    En fait, avec "isdir" et "isfile", il faut reconstruire le chemin complet… C'est ce qui est un peu pénible…

    Clodion

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Re-bonsoir Clodion,

    MERCI ! c'est la bonne réponse !
    J'avais bien lu quelque chose à ce sujet, mais j'avais sans doute pas intégré

    A tout hasard, et avant de clore cette discussion comme résolue, si le code (qui marche !) intéresse quelqu'un, le voici:

    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
     
    #!/usr/bin/python3
    # -*- coding: cp1252 -*-
     
    import os.path
    import sys                  # importe les modules system et operating system
     
     
    DOSSIER_SOURCE="K:\\musique_test"
     
    dirs = os.listdir(DOSSIER_SOURCE)
    for file in dirs:
      COMPLET=DOSSIER_SOURCE + os.sep + file
      #print ("Nom complet: ",COMPLET)
      if os.path.isdir(COMPLET):
        print("Dossier: ",file)
      if os.path.isfile(COMPLET):
        print ("Fichier: ",file)
    avec pour résultat:
    >d:\Applications\python32\pythonw -u "test1.py"
    Dossier: dossier1
    Dossier: dossier2
    Fichier: Matt Bianco - Get Out Your Lazy Bed.wav
    Fichier: Matt Bianco - Half a Minute.wav
    Fichier: Matt Bianco - More Than I Can Bear.wav
    Fichier: Matt Bianco - Whose Side Are You On-.wav
    >Exit code: 0
    Encore merci pour le coup de main!
    Michel

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

Discussions similaires

  1. problème avec os.path.isdir(path)
    Par vincentweb dans le forum Général Python
    Réponses: 2
    Dernier message: 27/04/2006, 12h04
  2. Ajouter des chemins dans la variable PATH
    Par Righetto Dominique dans le forum Linux
    Réponses: 7
    Dernier message: 21/03/2004, 17h38
  3. récupérer le path system
    Par Eugénie dans le forum MFC
    Réponses: 4
    Dernier message: 22/12/2003, 13h03
  4. Réponses: 3
    Dernier message: 10/06/2003, 14h16
  5. Redhat-9 changer le path des databases
    Par jean christophe dans le forum Installation
    Réponses: 7
    Dernier message: 30/05/2003, 17h53

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