При работе с каталогами в Python часто необходимо получить список подкаталогов внутри данного каталога. Независимо от того, организуете ли вы файлы, анализируете структуру каталогов или выполняете другие задачи по управлению файлами, умение составлять список подкаталогов является фундаментальным навыком. В этой статье мы рассмотрим пять простых способов выполнения этой задачи, сопровождаемых практическими примерами кода.
Метод 1: использование os.listdir() и os.path.isdir()
Модуль os в Python предоставляет различные функции для взаимодействия с операционной системой. Функция os.listdir() возвращает список всех файлов и каталогов в заданном каталоге. Объединив это с функцией os.path.isdir(), мы можем отфильтровать подкаталоги из списка. Вот пример:
import os
def list_subdirectories(directory):
subdirectories = []
for item in os.listdir(directory):
if os.path.isdir(os.path.join(directory, item)):
subdirectories.append(item)
return subdirectories
directory = '/path/to/directory'
subdirectories = list_subdirectories(directory)
print(subdirectories)
Метод 2: использование os.scandir() и метода is_dir()
Появившаяся в Python 3.5 функция os.scandir() является более эффективной альтернативой os.listdir(). Он возвращает итератор записей каталога, которые можно фильтровать с помощью метода is_dir(). Вот пример:
import os
def list_subdirectories(directory):
subdirectories = []
with os.scandir(directory) as entries:
for entry in entries:
if entry.is_dir():
subdirectories.append(entry.name)
return subdirectories
directory = '/path/to/directory'
subdirectories = list_subdirectories(directory)
print(subdirectories)
Метод 3: использование glob.glob() с шаблоном
Модуль glob в Python предоставляет удобный способ поиска файлов и каталогов с использованием шаблонов подстановочных знаков. Указав шаблон, соответствующий всем каталогам в целевом каталоге, мы можем получить подкаталоги. Вот пример:
import glob
def list_subdirectories(directory):
pattern = directory + '/*/'
subdirectories = [path.rstrip('/') for path in glob.glob(pattern)]
return subdirectories
directory = '/path/to/directory'
subdirectories = list_subdirectories(directory)
print(subdirectories)
Метод 4: использование pathlib.Path.glob() с шаблоном
Начиная с Python 3.4, модуль pathlib предлагает объектно-ориентированный подход для работы с файлами и каталогами. Метод Path.glob() можно использовать для поиска подкаталогов по шаблону. Вот пример:
from pathlib import Path
def list_subdirectories(directory):
path = Path(directory)
subdirectories = [str(subdir) for subdir in path.glob('*/') if subdir.is_dir()]
return subdirectories
directory = '/path/to/directory'
subdirectories = list_subdirectories(directory)
print(subdirectories)
Метод 5: использование рекурсивного обхода
Если вам нужно вывести список подкаталогов во вложенных каталогах, может оказаться полезным рекурсивный подход. Вот пример использования os.walk():
import os
def list_subdirectories(directory):
subdirectories = []
for root, dirs, files in os.walk(directory):
for subdir in dirs:
subdirectories.append(os.path.join(root, subdir))
return subdirectories
directory = '/path/to/directory'
subdirectories = list_subdirectories(directory)
print(subdirectories)
В этой статье мы рассмотрели пять различных методов вывода подкаталогов в Python. Мы рассмотрели как традиционные, так и современные подходы, используя различные модули, такие как os, glob и pathlib. Используя эти методы, вы можете эффективно извлекать подкаталоги в заданном каталоге и включать их в свои задачи управления файлами или анализа.
Не забудьте выбрать метод, который лучше всего соответствует вашим конкретным требованиям и стилю кодирования. Приятного кодирования!