Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1120 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Récupérer le contenu de répertoires

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer le contenu de répertoires

n°1112111
titouille
Posté le 08-06-2005 à 02:55:18  profilanswer
 

Bonjour à tous !!!
 
Voilà... l'idée est assez simple :
 
Récupérer le nom de tous les fichiers à partir d'un répertoire de base.
 
la structure est la suivante :
 
/ressources
-->/dir1
-->/dir2
-->/...
 
chaque "dir" contient 1 ou plusieurs fichier. on parse donc le répertoire de base ainsi que les sous-répertoires, en testant le type de fichier (mime) pour récupérer des types précis (jpg, gif, etc...). Récupérer le contenu avec listdir, j'y arrive, mais ce n'est pas récursif...
 
J'ai donc cherché un moment, puis je suis tombé sur la méthode os.walk. Mais c'est là que ça se complique.
 
Le but du jeu serai de retourner une chaine de caractère du genre :
 
dir1=file1.jpg;file2.jpg;file3.jpg|dir2=file1.jpg;file2.jpg;|dir3=file1.gif;file2.gif;file3.jpg
 
Mais je n'arrive pas à itérer sur les répertoires, puis droit après sur les fichiers... je n'itère que sur les répertoires, ou d'abord sur les répertoires, puis ensuite sur les fichiers...
 
voilà mon code de base...
 
import os;
 
path = os.path.join( os.getcwd(), 'ressources' )
final = ''
for root, dirs, files in os.walk(path, topdown=True):
    for name in dirs:
        final += name + "="
        for name in files :
             
            final += name + ";"
        final = final[0:-1]
        final += "|"
 
final = final[0:-1]
print final
 
 
si quelqu'un veut bien y jeter un oeil, ça serai gentil.
Sinon, est-ce qu'il existe une méthode qui permet de récupérer seulement la liste des sous-répertoires d'un répertoire précis, pour que je puisse décomposer en 2 actions : récupération des sous-répertoire / listdir de chaque sous-répertoire pour récupérer le contenu.
 
D'avance merci :)

mood
Publicité
Posté le 08-06-2005 à 02:55:18  profilanswer
 

n°1112134
masklinn
í dag viðrar vel til loftárása
Posté le 08-06-2005 à 08:23:46  profilanswer
 

[:kiki]
 
Les fichiers de "files" sont ceux de "root", "dirs" ce sont les sous répertoires de "root" [:kiki]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1112235
titouille
Posté le 08-06-2005 à 10:15:14  profilanswer
 

Génial, ça m'aide bcp...
 
Déjà, lorsque j'itère d'une certaine manière sur les fichiers, j'obtiens les fichiers des sous-répertoires, donc je ne crois pas que "files" soient les fichiers de "root"...
 
Mais plus sérieusement, une réponse comme ça, je crois que je m'en serai passé, ça ne m'aide en rien...

n°1112258
masklinn
í dag viðrar vel til loftárása
Posté le 08-06-2005 à 10:29:13  profilanswer
 

titouille a écrit :

Déjà, lorsque j'itère d'une certaine manière sur les fichiers, j'obtiens les fichiers des sous-répertoires


Non [:kiki]
walk est une procédure récursive, donc tu ES dans un sous répertoire, essaie d'afficher root + f avec f in files, tu verras [:kiki]

titouille a écrit :

Mais plus sérieusement, une réponse comme ça, je crois que je m'en serai passé, ça ne m'aide en rien...


Ok, super, t'as raison, mais regarde quand même les noms de variables et la manière dont tu essaies d'itérer sur tes files [:kiki]


Message édité par masklinn le 08-06-2005 à 10:30:43

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1112275
titouille
Posté le 08-06-2005 à 10:34:34  profilanswer
 

Oui, je vois ce que tu veux dire, mais ça ne me dit toujours rien sur la syntaxe à employer pour itérer correctement avec walk, c'est à dire passer sur 1 répertoire, puis voir son contenu, puis passer au répertoire suivant, etc...
 
Voilà ce que j'aurai voulu faire en 1 seule action, mais là je le fais en 2 avec listdir :
 
 
import os;
 
path = os.path.join( os.getcwd(), 'ressources' )
final = ''
for root, dirs, files in os.walk(path, topdown=True):
    for name in dirs:
        final += "|" + name + "="
         
        myPath = os.path.join( root, name )
        myDirs = os.listdir( myPath )
        for name in myDirs :
            final += name + ";"
         
        final = final[0:-1]
     
final = final[1:]
print final
 
 
La question n'est pas de savoir que root est le "path", que dirs correspondents aux répertoires et files au fichiers... je ne crois pas être bête à ce point là...  
Mon problème, c'est plutot que je n'ai pas trouvé la bonne "syntaxe" dans ma boucle for.
 
 
Merci tout de même pour ta tentative, a+

n°1112290
masklinn
í dag viðrar vel til loftárása
Posté le 08-06-2005 à 10:41:31  profilanswer
 

titouille a écrit :

La question n'est pas de savoir que root est le "path", que dirs correspondents aux répertoires et files au fichiers... je ne crois pas être bête à ce point là...  
Mon problème, c'est plutot que je n'ai pas trouvé la bonne "syntaxe" dans ma boucle for.


Ya des exemples dans la doc Python [:kiki]
 
Et sûrement d'autres dans Dive Into Python [:kiki]
 
RTFM quoi [:kiki]
 

import os
for root, dirs, files in os.walk(path):
    print "**** Folder %s ****"%(root)
    if(files):
        print "    ** Files: **"
        for f in files:
            print "        "+os.path.join(root, f)
    if(dirs):
        print "    ** Directories: **"
        for d in dirs:
            print "        "+os.path.join(root, d)


[:kiki]


Message édité par masklinn le 08-06-2005 à 10:41:53

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1112376
titouille
Posté le 08-06-2005 à 11:27:28  profilanswer
 

Merci pour l'exemple, il était parlant. C'est vrai que je n'ai pas vraiment pris la peine de comprendre ce que tu voulais dire par :
 
Les fichiers de "files" sont ceux de "root", "dirs" ce sont les sous répertoires de "root"
 
Je n'avais pas fait la relation entre cette explication et la récursivité de la fonction. Ce n'est pas forcément une question de syntaxe "for", c'était plutot, comme je l'ai dit avant, implémenter le walk de manière à ce qu'il passe sur 1 répertoire, puis son contenu, puis le répertoire suivant et son contenu, etc...
 
Ton exemple est très démonstratif, comparé à l'explication de départ :)
 
En fait, au final, j'arrive à ça :
 
 
import os, mimetypes
 
authorized_types = ('application/x-shockwave-flash', 'image/jpeg', 'image/png')
with_extension = 1
 
path = os.path.join( os.getcwd(), 'ressources' )
final = ''
 
for root, dirs, files in os.walk(path):
     
    # get length of path
    if( root is path ) :
        count = len(root)
 
    # get directories
    if( root is not path ) :
        final += "|" + root[count:] + "="
         
    # get files in each directories
    if(files):
        for f in files:
            # test mimetype of file
            mimetype = mimetypes.guess_type( os.path.join( path, f ))
            if mimetype[0] == None :
                mmt = "None"
            else :
                mmt = mimetype[0]
 
            # test authorized files and extension requirement
            if mmt in authorized_types or "*" in authorized_types :
                if int(with_extension) == 0 :
                    f = f.split('.')[0]
                final += f +";"
             
        final = final[0:-1]
 
final = final[1:]
print final
 
 
 
Y a surement des trucs qu'on peut faire plus simplement (genre faire un if sur une ligne pour le mimetype[0] == None, mais je sais pas si ça existe en python), je ne fais que débuter en python. Mais graçe à toi, j'ai déjà pu comprendre ça, je vais pouvoir avancer.
 
Merci !! :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Récupérer le contenu de répertoires

 

Sujets relatifs
Récupérer l'index d'un item d'un array constantRécupérer une variable d'environnement
[VBS] Coment recupérer ...récupérer du texte saisie
récupérer le clsid client d'un programme avec son progid[C] récupérer les arguments de argv en entier?
[java] recuperer le nom d'une variableJBoss hiérarchie des répertoires
problème avec strtok pour récupérer les videsRécupérer des url depuis une page
Plus de sujets relatifs à : Récupérer le contenu de répertoires


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR