#python #python-3.x
#python #python-3.x
Вопрос:
Я пытался написать программу, которая выполняет поиск во вложенном каталоге, а затем возвращает местоположение искомого файла.Чтобы вложить сканирование внутрь каталогов, я вызвал функцию внутри функции. Мне это удалось, поскольку программа работала, но когда я хотел, это было остановить поиск при выполнении первого нажатия. Код приведен ниже. Может кто-нибудь объяснить мне, почему итерация не останавливается.
search = sys.argv[2]
def find(loca,term):
count = 1
for file in os.listdir(loca):
if (count > 1):
break
try:
os.chdir(f'{loca}{file}')
newloca = loca '\' file
find(newloca,term)
except NotADirectoryError:
pass
except PermissionError:
pass
if(file == term):
print(file)
print(f"found the {term} at")
print(os.getcwd())
count = 1
find("E:/",search)
Комментарии:
1. Пожалуйста, поделитесь результатами этой программы.
2. Что вы увидели, когда вы выполнили свою программу с помощью отладчика? Было ли это чем-то неожиданным?
3. результат этой программы будет таким, как я сказал upside. Программа сканирует весь каталог E и возвращает поисковый запрос, который указан в консоли. Все, что я хочу знать, это почему итерация не останавливается. Или я делаю что-то не так
4. Нет, программа работает нормально. Только цикл не останавливается
Ответ №1:
Поскольку вы используете рекурсию, вам нужен какой-то способ сигнализации родительского элемента при обнаружении попадания. Для этого вы можете использовать return
.
def find(loca,term):
count = 1
for file in os.listdir(loca):
if (count > 1):
break
try:
os.chdir(f'{loca}{file}')
newloca = loca '\' file
if find(newloca,term):
return 1
except NotADirectoryError:
pass
except PermissionError:
pass
if(file == term):
print(file)
print(f"found the {term} at")
print(os.getcwd())
count = 1
return 1
Комментарии:
1. спасибо, что ваш код работает.. еще одна вещь — это эффективный метод для этого или есть что-то еще более эффективное