Список файлов ТОЛЬКО в текущем каталоге Python: без подкаталогов
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для формирования списка имен только файлов, находящихся в текущей директории, можно использовать следующий код:
import os
print([f for f in os.listdir('.') if os.path.isfile(f)])
Такой подход обеспечивает получение понятного списка файлов благодаря применению генератора списков и функции os.path.isfile()
.
Методы определения содержимого каталога: модули 'os' и 'pathlib'
Несмотря на то, что функция os.listdir
весьма удобна, для более эффективной работы рекомендуется применять функцию os.scandir()
, особенно с Python версией 3.5 и выше. Функция os.scandir()
предоставляет итератор для сканирования, который увеличивает производительность за счёт сокращения числа системных вызовов.
Рассмотрим теперь модуль pathlib
, представляющий объектно-ориентированный подход к обработке файловых путей:
from pathlib import Path
# Получаем список файлов с помощью pathlib и генератора
files_in_current_directory = (entry for entry in Path('.').iterdir() if entry.is_file())
print(list(files_in_current_directory))
Модуль pathlib
также предлагает метод is_file()
, аналог os.path.isfile()
, для фильтрации только файлов:
# Фильтруем файлы, как при традиционном отборе
files_in_current_directory = filter(lambda p: p.is_file(), Path('.').iterdir())
print(list(files_in_current_directory))
Приведение в порядок: Сортировка файлов по расширениям
Классифицируем файлы по их расширениям с помощью практичного генератора словарей:
# Как библиотекарь, разделяем файлы по категориям
files_by_extension = {
ext: [file for file in os.listdir('.') if file.endswith(ext)]
for ext in ['.jpg', '.txt', '.py', '.md'] # Добавляйте расширения при необходимости
}
Для перемещения файлов в соответствии с их расширениями используем модуль shutil
:
import shutil
# По образу гроссмейстера в шахматах, перемещаем файлы по категориям
for ext, files in files_by_extension.items():
for file in files:
shutil.move(file, f"destination_folder/{file}")
Всегда применяйте обработку исключений для предотвращения возникновения ошибок, которые могут произойти из-за отсутствия файлов или нюансов файловой системы:
try:
# Обработка операций с файлами с осторожностью
except OSError as e:
print(f"Ошибка: {e.strerror}")
Простота превыше всего
Если вы цените простоту и хотите избежать излишних импортов, можно использовать модуль glob
:
from glob import glob
print(glob('*.py')) # Выводит все Python-файлы в текущем каталоге
Визуализация
Представьте директории в виде птиц (🐦) и файлы как бумаги (📄). Ваша задача – выбрать бумаги:
Изображение: 🐦📄📄🐦🐦📄📄🐦
Отфильтровано: [📄, 📄, 📄, 📄]
И вуаля, мы успешно обнаружили все файлы — это прекрасно! 🎉
Управление рекурсией: Методичный обход
Функция os.walk
позволяет рекурсивно обходить каталоги и обладает высокой мощностью. Как известно, с большой мощностью идёт большая ответственность:
for root, dirs, files in os.walk('.', topdown=True):
# 'dirs.clear()' работает как барьер, останавливающий рекурсию директорий
dirs.clear()
print(files)
break # Завершаем цикл, хотя скрипт пока что все еще работает!
Данный код ограничивает рекурсию, очищая список dirs
, и прекращает обход при первой итерации.