Python: 5 способов составить список файлов в каталоге

Новости

ДомДом / Новости / Python: 5 способов составить список файлов в каталоге

May 28, 2023

Python: 5 способов составить список файлов в каталоге

Операции с файлами и каталогами являются базовыми навыками для инженеров-программистов. Это не просто копирование одного файла в другую папку в проводнике Windows, а понимание того, как

Операции с файлами и каталогами являются базовыми навыками для инженеров-программистов. Это не просто копирование одного файла в другую папку в проводнике Windows, а понимание того, как выполнять автоматические пакетные операции с использованием функций программного обеспечения.

Это большая тема. Сегодня мы углубимся в одну конкретную проблему: как составить список всех имен файлов в определенном каталоге. В Python каталог содержит группу файлов и подкаталогов.

Я представлю пять способов создания списка файлов в каталоге Python и доступа к ним. Каждый из этих методов используется в разных сценариях.

Один из способов составить список файлов в каталоге Python — использовать метод os.listdir(), который находится в модуле ОС Python:

Приведенный выше код выведет имена всех файлов и каталогов по текущему пути. Если вы хотите распечатать результаты по другому пути, просто дайте функции os.listdir() аргумент:

Если вы хотите распечатать только все файлы, os.path.isfile() поможет вам:

Для каталогов также есть функция os.path.isdir():

Это просто и полезно, но что, если он вернет большой список? Или что, если вам нужен только файл определенного типа? К счастью, Python предоставляет вам множество возможностей для более сложных сценариев.

Подробнее о PythonОбъединение списков в Python

Вы также можете перечислить файлы в каталоге Python с помощью walk(), другого метода из модуля ОС.

Как следует из названия, он может «проходить» по дереву каталогов слой за слоем. Когда вы вызываете метод os.walk(), он возвращает генератор. Каждый раз, когда вы вызываете метод next() для генерации следующего значения, он идет на один уровень глубже. Результатом будет кортеж, включающий три элемента: (путь к каталогу, имена каталогов, имена файлов).

Например, если вы хотите получить имена всех папок второго слоя, ваш код будет следующим:

Вместо получения имен всех файлов иногда вам может потребоваться получить имена файлов определенного типа. Поскольку модуль glob может добавлять регулярные выражения в поиск, он будет вашим другом для операций такого типа:

В приведенном выше коде будут перечислены имена файлов, заканчивающиеся на «log».

Начиная с Python 3.4, существует модуль pathlib, который также полезен. С помощью приемов понимания списков мы можем использовать одну строку кода для генерации всех имен файлов по текущему пути:

Удивительно, но Path() также включает в себя функцию glob(). Нет необходимости явно импортировать модуль glob в начало вашего файла Python.

Подробнее о группах Python5 Pandas: полезные советы по Python

Классическая функция os.listdir() интуитивно понятна, но неэффективна для больших каталогов, содержащих огромное количество файлов. Поэтому в Python 3.5 появилась новая аналогичная функция — os.scandir().

Да, вы, наверное, догадались. Эта функция вернет генератор вместо списка всех имен. И вы можете получить имена, как вам нужно. Это более эффективно в ситуациях, когда вам не нужно получать все имена сразу.