Поиск файлов Python по расширению

Обновлено: 21.11.2024

Мы знаем, как находить файлы и выполнять операции с ними, используя методы обработки файлов. Но когда нам нужно выполнить определенные операции с файлом с определенным расширением, например .txt , .PNG , .JPG или .py , нам нужно найти этот файл.

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

Endwith() — это встроенная функция, которая в этом случае возвращает True, если строка заканчивается определенным указанным суффиксом; иначе он вернет F alse . Функция glob.glob() возвращает имя файла с указанным шаблоном.

Пример: поиск файлов в каталоге с помощью функции listdir()

В приведенном ниже примере показано, как найти файлы в каталоге с помощью функции listdir().

После запуска программы мы получим следующий вывод.


instance_var_examples.py
mp4_1.mp4
mp4_5.mp4
practice.py
practice1.py
написать opeartion.jpg

Пример: поиск файла с помощью функции endwith()

В приведенном ниже примере показано, как найти файлы в каталоге с определенным расширением, используя функцию listdir() и функцию endwith().

После запуска программы мы получим следующий вывод.

Пример: поиск файлов с определенным расширением с помощью понимания

В приведенном ниже примере показано, как найти файлы в каталоге с определенным расширением, используя функцию listdir() и функцию endwith() с методом понимания.

После запуска программы мы получим следующий вывод.


['instance_var_examples.py', 'practice.py', 'practice1.py', 'Static_var.py', 'variables_2.py', 'var_1.py']

Пример: поиск файлов с определенным расширением с помощью модулей glob и os

В приведенном ниже примере показано, как найти файлы в каталоге с определенным расширением с помощью модулей glob и os.

После запуска программы мы получим следующий вывод.


instance_var_examples.py
practice.py
practice1.py
Static_var.py
variables_2.py
var_1.py

Заключение

В этом руководстве мы узнали, как находить файлы с указанными расширениями с помощью встроенной в Python функции endwith() и модулей glob и os.

В этой статье представлены различные методы поиска файлов с определенным расширением только в Python.

Метод glob.glob для поиска файлов с определенным расширением

Мы могли бы использовать модуль glob.glob для поиска файлов с определенным расширением только в Python.

Приведенные выше коды демонстрируют, как найти файлы с расширением txt в каталоге C:\Test .

Метод os.listdir() для поиска файлов с определенным расширением

Функция os.listdir() выводит список всех файлов в заданном каталоге без информации о пути к файлу. Вы можете извлечь файлы с определенным расширением, используя функцию str.endswith().

Вам необходимо создать полный путь с помощью функции os.path.join().

Метод pathlib.glob для поиска файлов с определенным расширением

Модуль

pathlib появился в Python 3.4 и предлагает объектно-ориентированные пути к файловой системе. Он предоставляет два стиля: пути Windows в ОС Windows и пути POSIX в Unix-подобных системах.

Результат представлен с помощью WindowsPath , и вы можете преобразовать результат в строковое представление, добавив str() , например

Найти файлы с определенным расширением в каталоге и его подкаталогах в Python

Шаблон C:\Test\*.txt ищет файлы txt только в каталоге C:\Test , но не в его подкаталогах. Если вы хотите также получать текстовые файлы в подкаталогах, вы можете немного изменить шаблон.

Подстановочные знаки ** между Test и .txt означают, что он должен найти файлы txt как в каталоге, так и в его подкаталогах.

Рекурсивный поиск файлов модуля pathlib

Подобно добавлению ** в glob.glob для рекурсивного поиска файлов, вы также можете добавить ** в метод pathlib.Path.glob для рекурсивного поиска файлов с определенным расширением.

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».

Статья по теме — файл Python

сообщить об этом объявлении

В этом руководстве вы узнаете, как использовать Python для получения расширения файла. Вы сделаете это, используя как библиотеку pathlib, так и модуль os.path.

Умение легко работать с файлами в Python – одно из самых сильных сторон языка. Например, вы можете использовать библиотеку glob для перебора файлов в папке. Когда вы делаете это, знание расширения каждого файла может повлиять на дальнейшие решения. Из-за этого знание того, как получить расширение файла, является навыком импорта! Давайте начнем изучать, как использовать Python для получения расширения файла в Windows, Mac и Linux!

Быстрый ответ: используйте Pathlib

Оглавление

Использование Python Pathlib для получения расширения файла

Библиотека Python pathlib невероятно упрощает работу с путями и управление ими. Из-за этого вполне логично, что у библиотеки есть способ доступа к расширению файла.

Библиотека pathlib поставляется с классом Path , который мы используем для создания объектов на основе путей. Когда мы загружаем путь к нашему файлу в объект Path, мы можем получить доступ к определенным атрибутам объекта, используя его встроенные свойства.

Давайте посмотрим, как мы можем использовать библиотеку pathlib в Python для получения расширения файла:

Здесь мы видим, что мы передали путь к файлу в класс Path, создав объект Path. После того, как мы это сделали, мы можем получить доступ к различным атрибутам, включая атрибут .suffix. Когда мы присвоили это переменной с именем extension , мы распечатали его, получив обратно .xlsx.

Этот метод хорошо работает как на компьютерах Mac, так и на Linux. Однако при работе с Windows пути к файлам работают немного по-другому.

По этой причине при использовании Windows создавайте путь к файлу в виде «сырой» строки. Но как это сделать? Просто добавьте к строке префикс r, например, r'some string'. Это позволит Python узнать, что нельзя использовать обратную косую черту в качестве escape-символов.

Теперь, когда мы рассмотрели, как использовать pathlib в Python для получения расширения файла, давайте посмотрим, как мы можем сделать то же самое с помощью модуля os.path.

Хотите узнать больше? Хотите узнать, как использовать библиотеку pathlib для автоматического переименования файлов в Python? Посмотрите мой подробный учебник и видео о науке о данных!

Использование os.path в Python для получения расширения файла

Модуль os.path позволяет нам легко работать с нашей операционной системой! Модуль пути позволяет нам использовать пути к файлам по-разному, в том числе позволяя нам получить расширение файла.

Модуль os.path имеет полезную функцию splitext() , которая позволяет нам разбивать пути к файлам на отдельные компоненты. К счастью, splitext() — это умная функция, которая умеет отделять расширения файлов, а не просто разбивать строку.

Давайте посмотрим, как мы можем использовать функцию splitext() для получения расширения файла:

  1. Мы импортируем os.path . Вместо записи из пути импорта ОС мы используем эту форму импорта, чтобы оставить путь переменной открытым и чистым.
  2. Мы загружаем нашу переменную file_path. Помните: если вы работаете в Windows, сделайте путь к файлу необработанной строкой, предварительно зафиксировав букву r перед открывающей кавычкой.
  3. Примените функцию splitext() к пути к файлу. Затем мы получаем доступ к последнему элементу элемента.

Функция splitext() возвращает кортеж: первая часть будет именем файла, а вторая — его расширением. Из-за этого, если нам нужно только расширение файла, мы можем просто получить доступ к последнему элементу кортежа.

Как использовать расширение файла Python

Теперь, когда вы узнали два разных способа использования Python для получения расширения файла, как вы можете применить это?

Один из удобных способов — воздействовать, скажем, только на файлы Excel. Если вы пишете цикл for, вы можете сначала проверить, является ли файл файлом Excel, а затем загрузить его в фрейм данных Pandas. Такой подход позволит вам пропустить файлы, которые на самом деле могут не содержать никаких данных.

Давайте посмотрим, как это сделать в Python и Pandas:

Заключение

В этом посте вы узнали, как использовать Python для получения расширения файла. Вы узнали, как это сделать, используя как библиотеку pathlib, так и модуль os.path, используя функцию splitext(). Вы научились делать это в Windows, Mac и Linux, чтобы ваш код мог работать в разных системах.

Чтобы узнать больше о функции splitext(), ознакомьтесь с официальной документацией здесь.

Имеется беспорядок в файлах для чтения в Python?Возможно, вы загрузили торговые данные Kaiko с непредсказуемыми подкаталогами и именами файлов из Penn+Box. Или, может быть, вы поместили файлы TXT, PDF и PY в один рабочий каталог, который не хотите реорганизовывать. Простой скрипт найдет нужные файлы, указав их имена и пути для удобства обработки.

Поскольку этот процесс включает изучение файловой структуры нашей операционной системы, мы начинаем с импорта модуля os в нашу среду Python:

Этот модуль, помимо стандартной установки Python, должен устранять любые зависимости в нашем будущем коде списка файлов.

Давайте определим нашу функцию списка файлов. Мы можем без воображения назвать его list_files и дать ему два аргумента, путь к файлу и тип файла:

filepath сообщит функции, с чего начать поиск файлов. Этот аргумент будет принимать строку пути к файлу в формате вашей операционной системы. (Обязательно кодируйте или экранируйте символы соответствующим образом.) Когда функция запускается, она предполагает, что этот базовый каталог содержит все файлы и/или подпапки, которые нам нужно проверить.

filetype сообщит функции, какой тип файла нужно найти. Этот аргумент принимает расширение файла в строковом формате (например: '.csv' или '.TXT' ).

В нашей функции нам нужно будет хранить все соответствующие пути к файлам, которые находит наш скрипт. Для этого создадим пустой список:

На практике наша функция найдет каждый файл в пути к файлу, проверит, соответствует ли его расширение файла заданному типу файла, и добавит соответствующие результаты в пути. Мы начинаем этот итеративный процесс с цикла for для поиска и проверки каждого файла:

В этой конфигурации os.walk() находит каждый файл и путь в пути к файлу и создает 3-кортеж (тип списка из 3-х элементов) с компонентами, которые мы будем называть root , dirs и files .

Поскольку files перечисляет все имена файлов в пределах пути, наша функция будет перебирать каждое имя файла в отдельности. Повторение снова включает в себя еще один цикл for:

В рамках цикла на уровне файла наша функция может исследовать различные аспекты каждого файла. Вы можете настроить этот раздел, если ваше приложение имеет другие требования. Сейчас мы сосредоточимся на проверке файлов на наличие соответствующего расширения файла.

Поскольку сравнение строк чувствительно к регистру, а расширения файлов — нет, мы используем метод lower() для преобразования файлов и типов файлов в строки нижнего регистра ( file.lower() и filetype.lower() соответственно). Это позволяет избежать путаницы из-за несоответствия заглавных букв.

В свою очередь, метод endwith() сравнивает конец нашего файла в нижнем регистре (где находится расширение файла) с типом файла в нижнем регистре, возвращая True в случае совпадения или False в противном случае.

Мы включаем наш логический результат ( True / False ) в оператор if, чтобы только соответствующий тип файла ( True output) запускал следующий этап нашей функции.

Если расширение файла совпадает, мы хотим добавить файл и его местоположение в paths , наш список соответствующих путей к файлам. os.path.join() объединит путь к корневому файлу и имя файла, чтобы создать полный адрес, на который может ссылаться наша операционная система. Метод append() добавит этот полный адрес файла в наш список путей:

Наши наборы циклов будут перебирать наши папки и файлы, покорно расширяя наш список путей. Чтобы сделать этот список доступным за пределами нашей функции, нам нужна последняя строка:

В целом наш код должен выглядеть следующим образом:

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

Теперь, когда ваш код может находить нужные ему файлы, вы можете сосредоточиться на объединении данных, анализе текста или проведении любых исследований, которые вы себе представляете.

Читайте также: