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

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

11.08.2020, 10:39. Показов 3249. Ответов 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
2696 / 1602 / 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
2696 / 1602 / 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
2696 / 1602 / 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
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
12.08.2020, 08:14
ioprst, ух, придрался же!

Там еще косяк, при вызове рекурсии, результат надо запомнить в переменную, сравнить ее на наличие значения, и если оно есть, то вернуть его!
1
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,325
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
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru