Python 3.5 OS.Walk для выбранных папок и включения их подпапок

Я пишу сценарий Python, где я ищу конкретную строку в каталоге дерева. Я прошу конечного пользователя определить, какие папки он хотел бы включить в поиск, и как только сценарий найдет одну из папок, которые пользователь хотел бы отсканировать, сценарий также должен сканировать все подпапки для этого. выбранная папка.

Я пытаюсь сделать пару петель для, но я не могу заставить это работать.

Начало скрипта выглядит так:

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"):

[Делать оставшиеся вещи]

Проблема заключается в том, что он входит в непрерывный цикл, потому что, как только он проходит по одной из выбранных папок, он возвращается к первому циклу for и пытается снова пройти по той же выбранной папке.

Есть лучший способ сделать это os.walk?

По сути, я хотел бы, чтобы скрипт находил определенную папку, а затем сканировал содержимое этой папки (включая папки), а затем продолжал переходить к следующей папке, не начиная заново.

1 ответ

Я понял это, и это на самом деле хорошо работает только с одним для цикла. Вот как выглядит новый код и надеюсь, что он поможет кому-то в будущем... Лучший

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)  
Другие вопросы по тегам