2016-10-24 2 views
0

J'écris un script python où je recherche une chaîne spécifique à travers un répertoire de l'arbre. Je demande à l'utilisateur final de définir les dossiers qu'il souhaite inclure dans la recherche, et une fois que le script trouve l'un des dossiers que l'utilisateur souhaite analyser, le script doit également analyser tous les sous-dossiers de cette recherche. dossier sélectionné. J'essaie de faire quelques boucles for, mais je ne peux pas le faire fonctionner.Python 3.5 OS.Walk pour les dossiers sélectionnés et inclure leurs sous-dossiers

Le début du script ressemble:

startTime = datetime.datetime.now() 
option = input("Do you want to scan: A) Excel B) PDF C) Both Q) Quit: ") 
option = option.lower() 
if (option == "b") or (option == "b") or (option == "c"): 
    stringToSearch = input("Which string do you want to search? ") 
    folderToSearch = input("Which top folder to search from(i.e. Z:\S 15\BOMs)? ") 
    subfoldersToSearch = input("Which subfolders(i.e. BOMs, Catalogs? <NO ANSWER = ALL) ") 
    print("Press CTRL + C to stop the search") 
    for foldername, subfolders, filenames in os.walk(folderToSearch): 
     for filename in filenames: 
      if (subfoldersToSearch == "") or (subfoldersToSearch in foldername): 
       print(subfoldersToSearch, "+++", foldername)      
       for x_foldername, x_subfolders, x_filenames in os.walk(foldername): 
        totalFiles += 1 
        for x_filename in x_filenames: 
         if (x_filename.endswith('.pdf') and option == "b") or (x_filename.endswith('.pdf') and option == "c"): 

[Do reste des choses]

Le problème est qu'il pénètre dans une boucle continue parce que dès que cela se fait à pied par l'un des sélectionnés dossiers, il revient à la première boucle et il essaie à nouveau de parcourir le même dossier sélectionné.

Y a-t-il une meilleure façon de le faire? os.walk? Fondamentalement, je voudrais que le script trouve un dossier spécifique, puis analyse le contenu de ce dossier (y compris les dossiers), puis continue jusqu'au dossier suivant sans recommencer à zéro.

Répondre

0

Je l'ai compris et cela fonctionne bien avec juste une boucle. Voici comment le nouveau code a l'air et espère qu'il aidera quelqu'un dans le futur ... Meilleur

startTime = datetime.datetime.now() 
    option = input("Do you want to scan: A) Excel B) PDF C) Both Q) Quit: ") 
    option = option.lower() 
    if (option == "b") or (option == "b") or (option == "c"): 
     stringToSearch = input("Which string do you want to search? ") 
     folderToSearch = input("Which top folder to search from(i.e. Z:\S 15\BOMs)? ") 
     subfoldersToSearch = input("Which subfolders(i.e. BOMs, Catalogs? <NO ANSWER = ALL) ") 
     print("Press CTRL + C to stop the search") 
     for foldername, subfolders, filenames in os.walk(folderToSearch, topdown=True): 
      print(subfolders) 
      for filename in filenames: 
       if (subfoldersToSearch == "") or (subfoldersToSearch in foldername): 
        print(subfoldersToSearch, "+++", foldername)