С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 69

Не получается сделать обход по всем папкам в поисках файла

11.08.2020, 10:39. Показов 3156. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
проход осуществляется только по первым папкам.
буду очень признателен, если подкинете дровишек в мой мыслительный костер, без кода, так чисто пару идей о том, как это лучше реализовать.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os
 
 
def find(fileName):
 
    if fileName not in os.listdir():
        for i in os.listdir():
            if os.path.isdir(i):
                os.chdir(f'{os.getcwd()}\\{i}')
                find(fileName)
    else:
        print(f'{fileName} находится в папке {os.getcwd()}')
 
 
 
find('string.py')
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2020, 10:39
Ответы с готовыми решениями:

Обход каталогов, доступ ко всем папкам
Привет ребята! Подскажите , есть программа - обход каталогов по диску, использую стандартные FindFirstFileW, FindNextFileW, Windows7...

Рекурсивный проход по всем папкам и удаление файла по имени
Добрый день Пытаюсь сделать скрипт для который бы проходил по всем папкам на сервере и удалял файл с нужным именем Вот склепал из...

Рекурсивный обход папок в поисках папки
Есть папка в ней много папок разной степени вложенности, в конечных папках есть папки "AAA" в которых лежат файлы. Надо...

12
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.08.2020, 10:47
Python
1
2
3
4
5
6
7
8
9
10
11
12
import os
from typing import Optional
 
def find_file(path: str, file: str) -> Optional[str]:
    for root, dirs, files in os.walk(path):
        if file in files:
            return f"{root}\\{file}"
    return None
 
 
print(find_file(".", "settings.txt"))  # .\settings.txt
print(find_file(".", "key.ico"))  # .\media\icon\key.ico
2
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 69
11.08.2020, 16:02  [ТС]
спасибо! а подскажите тогда, что это за конструкция? я новичок, не видел еще, чтобы в заголовке функции после определения аргументов и перед двоеточием было еще что-то def find_file(path: str, file: str) -> Optional[str]:
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
11.08.2020, 16:11
PEP 3107 -- Function Annotations
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.08.2020, 16:18
Гоголь Моголь, Это все синтаксический сахар, это позволяет понять какие типы аргументов передаются, а какие возвращаются, в продвинутых IDE, например как в PyCharm если ты будешь вызывать эту функцию не с ожидаемыми аргументами, IDE будет их засвечивать.

Например если ты вызовешь функцию вот так: find_file(1234, "text.txt") то он засветит первый аргумент и даст подсказку, что первый аргумент не подходит по типу.

Добавлено через 1 минуту
Модуль typing, позволяет более подробно отображать аннотации. Optional[str] <- говорит о том, что вернется либо строка, либо None.
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 69
11.08.2020, 17:15  [ТС]
то есть получается не обязательно писать -> Optional[str]
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
11.08.2020, 18:20
Да.
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 69
12.08.2020, 07:37  [ТС]
и модуль typing тоже получается необязателен...все понял, разобрался) вроде. только не понял, как это сделать "вручную", ну так чтоб потрудиться, знаете, чтоб жизнь медом не казалась) я представлял, что нужно какие-то знания из алгебры применять, типа "проход по графам" или что-то в этом духе.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
12.08.2020, 07:47
Гоголь Моголь,

Не оптимальный вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os
 
 
def find_file(path, file):
    for obj in os.listdir(path):
        full_path = f"{path}\\{obj}"
        if os.path.isdir(full_path):
            if find_file(full_path, file):
                break
        elif obj == file:
            break
    else:
        return None
    return f"{full_path}\\{file}"
 
print(find_file("D:\\", "example.txt"))
1
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
12.08.2020, 08:04
Цитата Сообщение от DmFat Посмотреть сообщение
full_path = f"{path}\\{obj}"
Python
1
os.path.join(path, obj)
2
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
12.08.2020, 08:14
ioprst, ух, придрался же!

Там еще косяк, при вызове рекурсии, результат надо запомнить в переменную, сравнить ее на наличие значения, и если оно есть, то вернуть его!
1
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
12.08.2020, 10:08
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import os
 
''' Найти в данной в файловой структуре все директории,
    в которых есть хотя бы один файл с расширением
    ".py".
 
    Вывести упорядоченный список таких директорий. '''
 
root = os.getcwd()      # текущая директория
answer = []             # результаты поиска
 
''' ищем все директории, которые содержат хотя бы один
    файл с расширением .py '''
for current, directories, files in os.walk('.'):
    for f in files:
        if f.endswith('.py'):
            d = current.replace('.', root)
            if d not in answer:
                answer.append(d)
 
''' сохраняем результаты поиска в файл '''
with open('output.txt', 'w') as fp:
    fp.write('\n'.join(sorted(answer)))
1
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
12.08.2020, 10:32
glob — Unix style pathname pattern expansion
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2020, 10:32
Помогаю со студенческими работами здесь

Нужно сделать сессию (это получается), а потом предавать ее ID всем остальным сриптам
Че-то долго мучался с сессиями... Мне нужно: Сделать сессию (это получается), а потом предавать ее ID всем остальным сриптам (это...

Обход директорий: нет доступа к некоторым папкам
таким образом обхожу директории на диске c:\ #include &lt;iostream&gt; using namespace std; #include &lt;iterator&gt; #include...

Чтение файла, как сделать прогон по всем строкам файла
Вот вообщем задание: Составить текстовый файл, состоящий из нескольких строк следующего вида:&lt;количество чисел в строке&gt; &lt;число...

Заполнение TreeView рекурсивно по всем папкам
Здравствуйте. Прошу помощи, нужно заполнить TreeView всеми каталогами и подкаталогами и так далее в глубь и файлами есть консольное...

Макрос, применяющийся ко всем папкам и файлам в папках
Доброго времени суток, господа программисты. У меня есть небольшой (спорно) кейс который сильно облегчит жизнь целой команде бедных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru