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

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

07.01.2022, 10:51. Показов 3837. Ответов 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
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,685
Записей в блоге: 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
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
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
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
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
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
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
1709 / 578 / 74
Регистрация: 10.04.2009
Сообщений: 9,293
07.01.2022, 18:22
мне кажется погуглить есть уже библиотека, она и строит дерево нужной папки, влезет в самое дно, а уже с неё взять нужное.......
0
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 18:36  [ТС]
Программа уже работает. Но хотелось бы не пускать в результат не нужные папки.

Добавлено через 9 минут
На другом диске программа не стала работать как надо. Выдаёт только одну папку. На самом деле mp4 очень много.
Что делать? Прошу помощи.
0
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
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
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
07.01.2022, 19:10
Цитата Сообщение от vlad56 Посмотреть сообщение
А где в коде вы применили exception?
нигде. я писал согласно условию. выдать пути папок где есть мп4.
Как можно измерить время выполнения программы на выбор
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
07.01.2022, 20:09  [ТС]
Кто нибудь может подсказать где можно доходчиво узнать по этой теме материал? А то очень туго заходит весь этот поиск файлов. Буду очень благодарен.
0
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru