Récupérer le contenu de répertoires - Python - Programmation
Marsh Posté le 08-06-2005 à 08:23:46
Les fichiers de "files" sont ceux de "root", "dirs" ce sont les sous répertoires de "root"
Marsh Posté le 08-06-2005 à 10:15:14
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...
Marsh Posté le 08-06-2005 à 10:29:13
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
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
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
Marsh Posté le 08-06-2005 à 10:34:34
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+
Marsh Posté le 08-06-2005 à 10:41:31
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à... |
Ya des exemples dans la doc Python
Et sûrement d'autres dans Dive Into Python
RTFM quoi
import os |
Marsh Posté le 08-06-2005 à 11:27:28
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 !!
Marsh Posté le 08-06-2005 à 02:55:18
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