Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686

Список папок на диске

07.01.2022, 10:51. Показов 3968. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Хочу получить список папок на диске содержащих файл .mp4
Написал код. Ответ не совсем то что я ожидал.
Python
1
2
3
4
5
6
7
8
import os
 
path = "D:"
for el in os.walk(path):
    for adress, dirs, files in os.walk(path):
        for file in files:
            if file.endswith('.mp4'):
                print(el)
Какой код надо использовать, чтобы получить близко к такому ответу? И как исключить из поиска отдельные папки? И с определённым размером файла mp4. Прошу помощи.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.01.2022, 10:51
Ответы с готовыми решениями:

Создать циклом 10 папок в каталоге с вашим именем на диске D. Проверить скриптом создались ли папки
Создать с помощью цикла 10 папок в каталоге с вашим именем на диске D. Проверить скриптом создались ли папки.

Вывести список папок на диске С
Задача довольно простая, на сделать всё никак не получается. Делаю на Visual C++ 2010, приложение winForms. Вот основной рабочий код: ...

Клиент сервер, команда на клиенте - посмотреть список папок на диске
Здравствуйте. делаю клиент сервер, команда на клиенте - посмотреть список папок на диске к примеру Е:/ , делаю через DirectoreInfo. Не...

31
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
07.01.2022, 11:15
Цитата Сообщение от vlad56 Посмотреть сообщение
Хочу получить список папок на диске
Цитата Сообщение от vlad56 Посмотреть сообщение
И как исключить из поиска отдельные папки?
- определитесь, что нужно...
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 11:23  [ТС]
Хочу получить полный путь до файлов с .mp4. Но некоторые папки явно не нужны мне. Хочу исключить их из списка.
Вот пример мусора что я получил. И хотелось чтобы такого не было в print.
0
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 11:34  [ТС]
Хотелось бы напечатать список папок содержащих .mp4 близко к первому скриншоту за исключением отдельных папок. Таких например как ProgramData и Users
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
07.01.2022, 13:58
vlad56, открываете папку. получаете имена файлов в список. фильтруете по расширению. в цикле идете по списку и создаете полный путь имя папки + имя файла. рекурсия тут самое то.
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 14:31  [ТС]
По моему вот так
Код
Python
1
2
3
4
5
6
7
import os.path
 
path = "D:"
for root, dirs, files in os.walk(path):
    for file in files:
        if file.endswith((".avi", ".mp4", ".wmv", ".wav", ".mp3")):
            print(root, dirs, files)
А как исключить не нужные папки по имени из цикла. Прошу помощи.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
07.01.2022, 14:45
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

создать условие проверки что название папки не находится среди имен исключений
Python
1
2
3
for name_path in ('a', 'b','tes_t', 'c', 'test1', 'test2'):
    if name_path in ('test_', 'test1', 'test2'):
        print(name_path)
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 15:25  [ТС]
Я посмотрел в root в пути есть имена папок. Здесь Prog не нужная папка.
Code
1
'D:Prog\\Kompozer\\App\\kompozer\\res\\samples'
Пишу код
Python
1
2
3
4
5
6
7
8
9
10
11
12
import os.path
 
dir = '.'
path = "D:"
for root, dirs, files in os.walk(path):
    for file in files:
        for name_path in ('Prog', 'a', 'b', 'tes_t', 'c', 'test1', 'test2'):
            if name_path in ('test_', 'test1', 'test2'):
               break
 
             if file.endswith((".avi", ".mp4", ".wmv", ".wav", ".mp3")):
                print(root, dirs, files, '\n')
Пишет ошибка. Как правильно написать код? Прошу помощи.

Добавлено через 21 минуту
Вот такой код работает без ошибки. Но ничего и не печатает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
mport os.path
 
dir = '.'
path = "D:"
for root, dirs, files in os.walk(path):
    for file in files:
        for name_path in ('Prog','Program Files (x86)', 'Program Files)', 'a', 'b', 'tes_t', 'c', 'test1', 'test2'):
            if name_path in ('Prog','Program Files (x86)', 'Program Files)','test_', 'test1', 'test2'):
                #print('ошибка')
                break
 
            if file.endswith((".avi", ".mp4", ".wmv", ".wav", ".mp3")):
                print(root, dirs, files, '\n')
0
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 15:56  [ТС]
Не могу понять. Почему не все исключения работают. Не работают 'Windows', 'User', 'Users', 'winsxs'. Или они в особом списке. Тогда как 'Prog', 'Program Files (x86)', 'Program Files' работают как исключения.
Код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os.path
 
dir = '.'
path = "D:"
for root, dirs, files in os.walk(path):
    for file in files:
        for name_path in (
        'Prog', 'Program Files (x86)', 'Program Files', 'Windows', 'User', 'Users', 'winsxs','a', 'b', 'tes_t', 'c', 'test1',
        'test2'):
            if name_path in (root):
                break
 
            if file.endswith((".avi", ".mp4", ".wmv", ".wav", ".mp3")):
                print(root, dirs, files, '\n')
И как избавиться от многократного печатания одного и того же файла. Напечатал раз, напечатал два. Ну и хватит печатать
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
07.01.2022, 16:54
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

Цитата Сообщение от vlad56 Посмотреть сообщение
Хочу получить список папок на диске содержащих файл .mp4
пробуйте

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import os
 
def hack_trash(path):
    children = [os.path.join(path, child) for child in os.listdir(path)]
    for directories in children:
        if os.path.isdir(directories):
            try: # исключает доступ к закрытым папкам
                hack_trash(directories)
            except PermissionError:
                pass
        else:
            for filename in os.listdir(path):
                if filename.endswith(".mp4"):
                    result.append(path)
                    break
                    
    
                                    
path = "D:"
result = []
hack_trash(path)
print(*result, sep = '\n')
если в папке есть хоть один файл mp4 то путь будет добавлен в результат

Добавлено через 12 минут
чуть подправил. а то одна папка пишется много раз в результат

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os
 
def hack_trash(path):
    children = [os.path.join(path, child) for child in os.listdir(path)]
    for directories in children:
        if os.path.isdir(directories):
            try: # исключает доступ к закрытым папкам
                full_ = hack_trash(directories)
                if full_ :
                    result.append(full_)
            except PermissionError:
                pass
        else:
            for filename in os.listdir(path):
                if filename.endswith(".mp4"):
                    return path
        
                    
                    
    
                                    
path = "D:"
result = []
hack_trash(path)
print(*result, sep = '\n')
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 17:46  [ТС]
А насколько уровней ищет эта программа. Я так понимаю на двух верхних уровнях. Дело в том что у меня многие папки вложены на несколько уровней друг в друга.
Что то долго работает программа. Уже начинаю беспокоится. Уже больше шести минут.

Добавлено через 7 минут
Где то зациклилась. Надо будет напечатать result по ходу программы.

Добавлено через 25 минут
Я смотрю папки исключения остались. Где можно в этом коде вставить эти исключения?
Code
1
'Prog', 'Program Files (x86)', 'Program Files', 'Windows', 'User', 'Users', 'winsxs
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
07.01.2022, 18:22
мне кажется погуглить есть уже библиотека, она и строит дерево нужной папки, влезет в самое дно, а уже с неё взять нужное.......
0
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 18:36  [ТС]
Программа уже работает. Но хотелось бы не пускать в результат не нужные папки.

Добавлено через 9 минут
На другом диске программа не стала работать как надо. Выдаёт только одну папку. На самом деле mp4 очень много.
Что делать? Прошу помощи.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
07.01.2022, 18:47
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
мне кажется погуглить есть уже библиотека, она и строит дерево
os.walk как раз это и делает. попробуй потом вылови папки с мп4. это опять куча обходов.
vlad56, попробуй.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import os
 
def hack_trash(path):
    print(path)
    children = [os.path.join(path, child) for child in os.listdir(path) if child not in exception ]
    for directories in children:
        if os.path.isdir(directories):
            try: # исключает доступ к закрытым папкам
                full_ = hack_trash(directories)
                if full_ :
                    result.append(full_)
            except PermissionError:
                pass
        else:
            for filename in os.listdir(path):
                if filename.endswith(".mp4"):
                    return path
                     
                                  
path = "D:"
exception = ('Prog', 'Program Files (x86)', 'Program Files', 'Windows', 'User', 'Users', 'winsxs')
result = []
hack_trash(path)
print(*result, sep = '\n')
обход диска с большим количеством папок и файлов для питона долгая процедура. так что придется ждать
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 19:00  [ТС]
А где в коде вы применили exception? Не пойму. Как можно измерить время выполнения программы.
0
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 19:06  [ТС]
На другом диске только одну верхнюю папку находит. В глубину не идёт. А mp4 очень много на этом диске.

0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
07.01.2022, 19:10
Цитата Сообщение от vlad56 Посмотреть сообщение
А где в коде вы применили exception?
нигде. я писал согласно условию. выдать пути папок где есть мп4.
Как можно измерить время выполнения программы на выбор
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 20:09  [ТС]
Кто нибудь может подсказать где можно доходчиво узнать по этой теме материал? А то очень туго заходит весь этот поиск файлов. Буду очень благодарен.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
08.01.2022, 08:47
Цитата Сообщение от vlad56 Посмотреть сообщение
Кто нибудь может подсказать где можно доходчиво узнать по этой теме материал
только в своей голове составив логику обхода папок.
Цитата Сообщение от vlad56 Посмотреть сообщение
На другом диске только одну верхнюю папку находит.
да тут ошибка. я что бы путь папок не дублировался сделал выход из папки при нахождении мп4 файла а не подумал что ниже могут быть еще папки а внутри них еще папки с файлами. можно результат было в множество выводить но неупорядоченно.
вообщем словарь. ключ путь до папки - значения список путей до файлов в этой папке

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import os
 
def hack_trash(path):
    children = [os.path.join(path, child) for child in os.listdir(path) if child not in exception ]
    for directories in children:
        if os.path.isdir(directories): 
            try: 
                hack_trash(directories) 
            except PermissionError:
                    continue
        else: # если directories файл
            if directories.endswith('.mp4'):
                # если имена не нужны то строку ниже раcкомментируй а остальные удали
                #dct.setdefault(path, [])
                filename = directories.split('\\')[-1]
                dct.setdefault(path, []).append(filename)
 
                                  
path = 'D:' 
exception = ('Prog', 'Program Files (x86)', 'Program Files', 'Windows', 'User', 'Users', 'winsxs')
dct = {}
hack_trash(path)
for key in dct:
    print(f'\n{key}')
    # если есть имена и нужен вывод иначе удаляем эти строки
    for val in dct.get(key):
        print(f'        {val}')
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
08.01.2022, 09:34  [ТС]
Здравствуйте.
Как можно прицепить exception к . Чтобы сразу искать кучу файлов. Например .wav, .mp3, .pdf, .avi, .wmv.
Python
1
if directories.endswith('.mp4'):
Чтобы сразу искать кучу файлов. Например .wav, .mp3, .pdf, .avi, .wmv.

Я посмотрел как работает программа. По моему чтобы ускорить работу программы нужно определять из children где файл, а где папка. И если файл то или заносить в dct или идти дальше по children. Исследовать следующие directories. А то взяли файл и гоняем его опять и опять через hack_trash(directories) по всему children. Большая потеря времени на пустые действия.

Прогнал по другому диску. Выскочила ошибка. Похоже длинный путь.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Traceback (most recent call last):
  File "C:\Users\user\openpage\search1.py", line 23, in <module>
    hack_trash(path)
  File "C:\Users\user\openpage\search1.py", line 9, in hack_trash
    hack_trash(directories)
  File "C:\Users\user\openpage\search1.py", line 9, in hack_trash
    hack_trash(directories)
  File "C:\Users\user\openpage\search1.py", line 9, in hack_trash
    hack_trash(directories)
  [Previous line repeated 9 more times]
  File "C:\Users\user\openpage\search1.py", line 5, in hack_trash
    children = [os.path.join(path, child) for child in os.listdir(path) if child not in exception]
FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'J:_ 1 Бизнес\\_Дорвеи\\Дамп форума Дорохина(Jonn22) на начало 2013 года\\джон 2013\\Быстрые деньги в дорвеях\\1. Первый модуль\\День 6 - создание шаблона от А до Я\\Видео Создание download шаблонов под jako pandorabox redbutton\\PandoraBoxx\\stompfrog.co.uk\\js\\libs'
 
Process finished with exit code 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.01.2022, 09:34
Помогаю со студенческими работами здесь

Подскажите как получить список всех папок и файлов на диске С
Подскажите как получить список всех папок и файлов на диске С ?

Дублирование находящихся на одном диске папок с файлами на другом диске
Существует необходимость дублирования большей части папок с одного диска на другой.( 1-й диск 1Тб, а второй на 500Гб) Возникает вопрос как...

Получить список папок и вложенных папок, отсортированных по размеру
Как можно получить список папок и вложенных папок, отсортированных по размеру

Поиск папок на диске
Как создать операцию? Цель:Ищит папку Test на диске c: ,если нашло вывести сообщение &quot;Папка найдена&quot; а если не удалось найти то...

Не видно папок на диске С (на втором диске видно)
у меня такая же лажа касперский щас установил толку не знаю будет или нет дайте советы


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
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