web-dev-qa-db-fra.com

Parcourez les dossiers, puis les sous-dossiers et imprimez les noms de fichiers avec le chemin d'accès au fichier texte

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.

18
manish449

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                                                                                                          
18

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:

  1. Le répertoire de travail
  2. Une liste de chaînes nommant les sous-répertoires présents dans le répertoire de travail
  3. Une liste des fichiers présents dans le répertoire de travail

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
43
L. Teder