Как использовать модуль os для получения списка файлов в директории в Python?
Получение списка всех файлов в каталоге с помощью Python
В Python очень часто потребуется получить список всех файлов и папок в определенном каталоге. При изучении этой темы вы можете быть удивлены разнообразием подходов к решению этой задачи.
Когда у вас есть несколько способов выполнить одну и ту же задачу, это может быть признаком отсутствия универсального решения. Вероятно, каждое решение будет иметь свои преимущества и недостатки. Это так и происходит в случае получения списка содержимого каталога в Python.
В этом руководстве вы будете сосредоточены на самых универсальных техниках модуля pathlib
для перечисления элементов в каталоге, но также узнаете немного о некоторых альтернативных инструментах.
Сначала работать с путями как с строками может показаться нормальным, но стоит только добавить несколько операционных систем, и дела становятся сложнее. Вы также оказываетесь с кучей кода, связанного с обработкой строк, которые очень абстрагируются от самой сути пути файла. Все может стать запутанным очень быстро.
Это не означает, что работа с путями как со строками невозможна - в конце концов, программисты много лет обходились без модуля pathlib
! Модуль pathlib
просто выполняет большую часть сложной работы и позволяет вам сосредоточиться на основной логике вашего кода.
Все начинается с создания объекта Path
, который будет отличаться в зависимости от вашей операционной системы. В Windows вы получите объект WindowsPath
, в то время как в Linux и macOS будет возвращен PosixPath
:
С использованием этих зависящих от ОС объектов вы можете воспользоваться множеством методов и свойств, доступных в модуле pathlib
. Например, вы можете получить список всех файлов и папок в каталоге, используя метод iterdir()
:
Если вы хотите получить только файлы, вы можете добавить проверку с помощью метода is_file()
:
Если вы хотите получить только папки, вы можете использовать метод is_dir()
:
Вы также можете получить только определенные типы файлов или папок, используя файловые маски с помощью метода glob()
:
В этом случае будут выведены только файлы с расширением .txt
.
Если вам нужно рекурсивно перечислить все файлы и папки в каталоге, включая подкаталоги, вы можете воспользоваться методом rglob()
:
Теперь будут перечислены все файлы и папки в каталоге и всех его подкаталогах.
Если вам необходимо отфильтровать определенные папки или типы файлов при рекурсивном перечислении, вы можете использовать более сложные файловые маски:
В этом случае будут перечислены только файлы и папки, исключая те, которые начинаются с буквы “t”.
Кроме того, модуль pathlib
предоставляет возможность определить свой собственный фильтри