Получение подкаталогов Python: исключаем и копируем файлы

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Быстрый ответ

Для получения списка непосредственных подкаталогов, можно использовать следующий код:

Python
Скопировать код
import os
subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]

Здесь мы используем функцию os.listdir('.') для перечисления контента текущего каталога ('.'). Функция os.path.isdir() проверяет, является ли элемент каталогом, после чего мы собираем список названий подкаталогов.

Пошаговый план для смены профессии

Использование мощи os.scandir() для получения списка подкаталогов

Хотя функция os.listdir() неплоха в своем роде, os.scandir() предлагает больше производительности и удобства. Для объемных каталогов os.scandir() работает быстрее благодаря своему итератору, который возвращает объекты DirEntry:

Python
Скопировать код
subdirs = [entry.name for entry in os.scandir('.') if entry.is_dir()]

Функция os.scandir() также облегчает исключение определённых каталогов:

Python
Скопировать код
# Исключаем нежелательные каталоги
ignored_dirs = {'ignore_this', 'and_this'}
subdirs = [entry.name for entry in os.scandir('.') if entry.is_dir() and entry.name not in ignored_dirs]

Поиск каталогов с использованием шаблонов через Glob

Не оставляйте без внимания мощь кода '*', который особенно эффективен в сочетании с модулем glob:

Python
Скопировать код
import glob
subdirs = glob.glob('*/')

Шаблон */ означает, что нас интересуют только каталоги.

Обход дерева каталогов с использованием os.walk()

Для обхода иерархии каталогов можно использовать os.walk(). Однако если вам нужны лишь непосредственные подкаталоги, используйте next():

Python
Скопировать код
subdirs = next(os.walk('.'))[1]

Таким образом, мы получаем непосредственные подкаталоги текущего каталога, не забираясь в дебри файловой системы, как это делает os.walk() полностью.

Визуализация

Эту задачу можно сравнить с просмотром помещений на первом уровне в доме:

Markdown
Скопировать код
🏠
├── 🛏 Спальня
├── 🍳 Кухня
└── 🛋 Гостиная

Python
Скопировать код
import os

for entry in os.listdir('путь_к_дому'):
    if os.path.isdir(os.path.join('путь_к_дому', entry)):
        print(entry)

В этом примере os.listdir() открывает дверь, а os.path.isdir() проверяет, является ли пространство за ней комнатой. Это помогает избежать попадания в ненужные места и не заблудиться по дому.

Сортировка и соответствие шаблонам списка каталогов

Иногда порядок имеет значение. Можно упорядочить каталоги по времени последнего обновления или алфавиту с помощью функции sorted():

Python
Скопировать код
subdirs = sorted(subdirs, key=lambda d: os.path.getmtime(os.path.join('.', d)))

Python
Скопировать код
import natsort
subdirs = natsort.natsorted(subdirs)

Для фильтрации по шаблону можно использовать модули glob и fnmatch:

Python
Скопировать код
import fnmatch

# Фильтруем нежелательные каталоги по шаблону
patterns_to_exclude = ['temp*', '*.bak']
subdirs = [d for d in os.listdir('.') if os.path.isdir(d) 
           and not any(fnmatch.fnmatch(d, pattern) for pattern in patterns_to_exclude)]

Создание продвинутых скриптов с помощью инструментов Python для работы с каталогами

Сочетая перечисленные выше техники, можно создавать мощные скрипты на Python для автоматизации работы с файловыми системами:

Python
Скопировать код
import shutil

def copy_to_subdirs(file, target_dirs):
    for subdir in target_dirs:
        shutil.copy(file, os.path.join(subdir, file))

# Выбираем любой из обсуждаемых ранее методов получения списка подкаталогов
subdirs = get_immediate_subdirectories('.')
copy_to_subdirs('report.txt', subdirs)

Полезные материалы

  1. os — Многофункциональные интерфейсы ОС — Документация Python 3.12.2 — изучите официальную документацию для os.listdir.
  2. file – Как получить все непосредственные подкаталоги в Python – Stack Overflow — обсуждение опыта сообщества и практические примеры.
  3. os — Многофункциональные интерфейсы ОС — Документация Python 3.12.2 — подробное описание os.scandir(), изюминки инструментов для работы с каталогами.
  4. os.path — Универсальные методы работы с путями файлов — Документация Python 3.12.2 — освоение методик работы с путями файлов для навигации по каталогам.
  5. Python | Метод os.scandir() – GeeksforGeeks – изучение преимуществ и недостатков os.scandir() в сравнении с os.walk().
  6. python – Как использовать Glob для рекурсивного поиска файлов? – Stack Overflow — использование модуля glob для гибкого поиска в каталогах.
  7. pathlib — Объектно-ориентированные пути в файловой системе — Документация Python 3.12.2 — введение в модуль pathlib для объектно-ориентированной работы с файловыми системами.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для получения списка непосредственных подкаталогов?
1 / 5

Загрузка...