2016-12-20 1 views
0

Le but de ce programme est de parcourir récursivement tous les fichiers et répertoires d'un répertoire racine pour trouver les correspondances d'une phrase clé (fichier nommé dans la méthode principale). Mon problème principal est que je n'arrive pas à comprendre comment entrer dans les sous-répertoires et m'assurer de parcourir tous les fichiers et répertoires qui s'y trouvent, puis de continuer jusqu'à ce que j'aie parcouru tous les répertoires de l'arborescence répertoire racine.Lecture récursive des dossiers en Python

Voici mon code actuel.

import os 
import sys 

def search_dir(path): 
    for root, dirs, files in os.walk(os.path.abspath(path)): 
     for f in files: 
      if file in f: 
       print("File : {}".format(os.path.join(root, f))) 
     for d in dirs: 
      if file in d: 
       print("Dir : {}".format(os.path.join(root, d))) 

def main(file, path): 
    print("Starting search for '{}'\n".format(file)) 
    search_dir(path) 
    print("\nDone Searching") 


if __name__ == "__main__": 
    if len(sys.argv)!=3: 
     print("Usage: python find_file.py [path] [file]") 
    else: 
     path, file = sys.argv[1], sys.argv[2] 
     main(file, path) 

J'ai essayé de changer les répertoires en utilisant os.chdir (new_path) mais je finissent par avoir des problèmes que je me perds quand changer de répertoire dos, etc. Je me sens comme si il y a un moyen d'utiliser récursive La fonction search_dir, mais après beaucoup de réflexion je ne peux pas l'exécuter correctement.

+0

Je vais probablement me marqué vers le bas, mais je me suis aperçu après avoir posté ce que os.walk va déjà à travers l'arbre entier. Ainsi, la fonction utilisant os.walk n'a pas besoin d'être récursivement utilisée. Peut-être que quelqu'un pourrait alors clarifier ce que fait exactement os.walk, car la lecture de la fonction ne m'a pas permis de le comprendre. –

Répondre

2

Cela devrait le faire:

import os 

def search_dir(root, search): 
    for root, _dirnames, fnames in os.walk(root): 
     for fname in fnames: 
      fpath = os.path.join(root, fname) 
      with open(fpath) as infile: 
       if any(search in line for line in infile): 
        print("Search term found in", fpath) 


if _name__ == "__main__": 
    if len(sys.argv)!=3: 
     print("Usage: python find_file.py [path] [searchTerm]") 
    else: 
     path, search = sys.argv[1], sys.argv[2] 
     main(file, search) 
+0

Merci, je ne savais pas que je pourrais aussi parcourir les fichiers de cette façon, et de plus cela m'a aidé à comprendre regarder à travers les fichiers, pas seulement sur les titres. Je me rends compte que mon message était légèrement ambigu, mais j'ai juste besoin de trouver si la phrase clé existe dans les noms de fichiers ou de répertoires. –