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 :

Liste de noms de fichiers [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Liste de noms de fichiers
    Bonjour,

    Je suis une débutante dans le langage python.

    Je cherche à rassembler dans un fichier texte la liste de la première partie du nom de mes photos (ex : "IDxxx" avec xxx correspondant à une suite de chiffres qui varie) et la liste du nom complet de ces photos ("IDxxx-Lamalgue(2)"). Je cherche à faire ce traitement par python car j'ai plus de 4000 photos à traitées.
    Pour la première partie qui consiste à récupérer juste la première partie du nom de mes photos, voici ce que j'ai essayer de faire :
    import re, os, glob


    wksp = r"C\Projet\Donnees_base\Photos\CAR"




    for dirname, subdirs, files in os.walk(wksp,True):
    fichiers = glob.glob(dirname+os.sep+'*.jpg')


    for photo in fichiers:
    photo.split ("-")
    print photo [0]

    Voici ce qu'il me retourne :
    \
    \
    \
    \
    \
    \
    ...

    Je suis bloqué je ne sais pas comment je pourrais le faire.
    Pourriez-vous m'aider s'il-vous-plaît.

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    La construction des noms de fichiers est peut-être en cause, il n'est pas nécessaire de mélanger os.walk et glob.glob ici.
    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
     
    >>> import os
    >>> fld = '/home/vincent/Images/Arts' 
    >>> for root, dirs, files in os.walk(fld):
    ...     for f in files:
    ...             pict = unicode(os.path.join(root, f), 'utf-8')
    ...             print pict
    ...             print pict.split('_')
    ... 
    /home/vincent/Images/Arts/lytho_mélanésie1036.jpg
    [u'/home/vincent/Images/Arts/lytho', u'm\xe9lan\xe9sie1036.jpg']
    /home/vincent/Images/Arts/lytho_mélanésie1027.jpg
    [u'/home/vincent/Images/Arts/lytho', u'm\xe9lan\xe9sie1027.jpg']
    /home/vincent/Images/Arts/lytho_mélanésie1034.jpg
    [u'/home/vincent/Images/Arts/lytho', u'm\xe9lan\xe9sie1034.jpg']
    /home/vincent/Images/Arts/lytho_mélanésie1043.jpg
    [u'/home/vincent/Images/Arts/lytho', u'm\xe9lan\xe9sie1043.jpg']
    ...
    Si tu ne veux que les .jpg il suffit d'ajouter une condition pour cela, et ce sera plus simple.

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    tout d'abord merci d'utiliser la balise code "#" pour poster ton code ce sera plus lisible!

    En fait cela ne fonctionne pas car tu ne stocke la valeur de split dans aucune variable.
    Quand tu fais
    Cela ne modifie pas la variable photo, cela renvoie une liste que tu ne récupère pas ici.
    Il faudrait mieux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parts = photo.split ("-")
    print parts[0]
    Je peux te proposer de modifier un peu ton code:
    Déjà tu n'as pas vraiment besoin d'utiliser glob, tu peut te servir directement des valeurs renvoyées par os.walk().
    Je te propose également d'utiliser splitext pour connaître l'extension d'un fichier.
    Cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for dirname, subdirs, files in os.walk(wksp,True):
        # Boucle sur chaque fichier du dossier wksp et ses sous-dossiers
        for name in files:
            _, ext = os.path.splitext(name)   # Recuperation de l'extension du fichier
            if ext == ".jpg":
                photo = os.path.basename(name)  # On ne recupere que le nom de fichier (sans le nom du repertoire)
                parts = photo.split("-")
                print parts[0]

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci à vous deux de m'avoir répondu. Grâce à vous j'ai compris mes erreurs, cependant le script ne fonctionne pas quand même.

    En effet, lorsque j'ai repris ta partie de script mokochan (ton script semble correspondre parfaitement à ce que je cherche à faire) pour le tester, il ne me retourne aucune erreur mais ne m'imprime rien non plus. Voici ce qu'il m'écrit :

    *** Console de processus distant Réinitialisée ***
    >>>
    >>>

    Comme il ne renvoie aucune erreur je ne comprend pas où est le problème, s'il y en a un.

    Merci encore pour votre future réponse.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Bonjour

    Pourrais-tu poster ton code modifié (en utilisant la balise appropriée) de façon à ce que nous puissions nous rendre compte de ce qui cloche au lieu de deviner ?

    Merci

  6. #6
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Dans ce cas essaye d'ajouter des print un peu partout pour trouver d'où vient le problème,
    par exemple il se peut que le programme n'entre jamais dans la condition "if ext == ".jpg" parce que tes fichiers se terminent par ".JPG" en majuscules, ou quelque chose du genre.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Voici le code que j'ai mis (pour répondre à chticricri) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import os
     
    wksp = r"C\stagiaire\Aude\Photos" # chemin des photos
     
    for dirname, subdirs, files in os.walk(wksp,True):
        # Boucle sur chaque fichier du dossier wksp et ses sous-dossiers
        for name in files:
                photo = os.path.basename(name)  # On ne recupere que le nom de fichier (sans le nom du repertoire)
                _, ext = os.path.splitext(name)   # Recuperation de l'extension du fichier
                if ext == ".jpg":                 # condition pour ne prendre que les photos en jpeg
                    photoid = photo.split("-")      # On decoupe le ficher grace au "-"
                    print photoid[0]                # On recupere la partie avant le "-"
    Quand j'ai mis un print pour chaque opération le seul qui a marché était celui qui m'imprimait mon wksp. Je suppose qu'il y a une erreur à partir de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for dirname, subdirs, files in os.walk(wksp,True):
    Cependant je sais toujours pas de quelle erreur il peut s'agir.

  8. #8
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Mais pourtant ça fonctionnait au début non? Cette partie du code n'a pas changé je crois.

    Est-ce que tu es sûre que ta variable wksp est correcte? Que ce dossier n'est pas vide?
    Tu peux tester s'il est correct en faisant un:

    Si ça te renvoie "True" c'est que le répertoire est bon.

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    ceci ne sert à rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                photo = os.path.basename(name)
    name est déjà le nom de fichier sans le chemin.

    et, puis comme dit mokochan, (à qui je dis bienvenue dans la cour des grands) os.walk ne retourne pas d'erreur si le nom du dossier est erroné, donc vérifie.

  10. #10
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Merci VinsS ^^
    Mais du coup, si jamais le fichier se trouve dans un sous-dossier, "name" contient également le nom du sous-dossier non?
    C'est pour cela que j'avais ajouté le basename mais je peux me tromper.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    En effet, il s'agissait bien du wksp j'ai repris le bon chemin et ça a marché. J'ai aussi du remplacer .jpg par .JPG vu que mes fichiers étaient en .JPG et non .jpg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     _, ext = os.path.splitext(name)   # Recuperation de l'extension du fichier
            if ext == ".JPG":                # condition pour ne prendre que les photos en jpeg
    Si quelqu'un d'autre à besoin de faire quelque chose de similaire voici le code final utilisé qui a fonctionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import os
     
    wksp = r"C:\stagiaire\Photos" # chemin des photos
     
    for dirname, subdirs, files in os.walk(wksp,True):
        # Boucle sur chaque fichier du dossier wksp et ses sous-dossiers
        print files
        for name in files:
            _, ext = os.path.splitext(name)   # Recuperation de l'extension du fichier
            if ext == ".JPG":                # condition pour ne prendre que les photos en jpeg
                photoid = name.split("-")      # On decoupe le ficher grace au "-"
                print photoid [0]               # On recupere la partie avant le "-"
    Merci beaucoup à vous tous pour votre aide et la rapidité de vos réponses.

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

Discussions similaires

  1. Liste de nom de fichier
    Par gluc86 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/12/2007, 10h58
  2. Réponses: 7
    Dernier message: 06/08/2007, 14h34
  3. Réponses: 3
    Dernier message: 19/06/2007, 14h07
  4. listé mes noms de fichiers
    Par totore dans le forum Windows
    Réponses: 6
    Dernier message: 24/10/2006, 23h32
  5. fonction qui met en liste les noms des fichiers
    Par aliassaf dans le forum Général Python
    Réponses: 2
    Dernier message: 22/06/2006, 11h50

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