J'essaie d'utiliser python pour créer les fichiers nécessaires pour exécuter un autre logiciel en lot. Pour une partie de cela, je dois produire un fichier texte qui charge les fichiers de données nécessaires dans le logiciel. Mon Le problème est que les fichiers dont j'ai besoin pour entrer dans ce fichier texte sont stockés dans un ensemble de dossiers structurés.
J'ai besoin de parcourir un ensemble de dossiers (jusqu'à 20), chacun pouvant contenir jusqu'à 3 dossiers supplémentaires contenant les fichiers dont j'ai besoin. Le niveau inférieur des dossiers contient un ensemble de fichiers nécessaires pour chaque exécution du logiciel. Le fichier texte doit avoir le chemin + le nom de ces fichiers imprimés ligne par ligne, ajouter une ligne d'instructions, puis passer au jeu de fichiers suivant à partir d'un dossier et ainsi de suite jusqu'à ce que tous les dossiers de sous-niveau aient été vérifiés.
Utilisez os.walk (). Ce qui suit affichera une liste de tous les fichiers dans les sous-répertoires de "dir". Les résultats peuvent être manipulés selon vos besoins:
import os
def list_files(dir):
r = []
subdirs = [x[0] for x in os.walk(dir)]
for subdir in subdirs:
files = os.walk(subdir).next()[2]
if (len(files) > 0):
for file in files:
r.append(subdir + "/" + file)
return r
La réponse de Charles est bonne, mais peut être améliorée pour augmenter la vitesse et l'efficacité. Chaque élément produit par os.walk () est un tuple de trois éléments. Ces éléments sont:
Sachant cela, une grande partie du code de Charles peut être condensée avec la modification d'un forloop:
import os
def list_files(dir):
r = []
for root, dirs, files in os.walk(dir):
for name in files:
r.append(os.path.join(root, name))
return r