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)