Как найти файлы с определенным расширением только на Python

  1. Метод поиска файлов с определённым расширением glob.glob
  2. Метод os.listdir() для поиска файлов с определённым расширением
  3. Метод pathlib.glob для поиска файлов с определённым расширением
  4. Поиск файлов с определенным расширением в каталоге и его подкаталогах на Python
  5. Модуль pathlib ищет файлы рекурсивно

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

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

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

import glob

targetPattern = r"C:\Test\*.txt"
glob.glob(targetPattern)

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

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

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

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [_ for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['test.txt', 'test1.txt']

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

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [os.path.join(fileDir, _) for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test1.txt']

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

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

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt')]

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

>>> [str(_) for _ in pathlib.Path(fileDir).glob(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test.txt']

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

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

import glob

targetPattern = r"C:\Test\**\*.txt"
glob.glob(targetPattern)

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

Модуль pathlib ищет файлы рекурсивно

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

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"**\*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt'), WindowsPath('C:/Test/sub/test1.txt')]

Сопутствующая статья - Python file-path

  • Как получить все файлы каталога
  • Как удалить файл и каталог на Python
  • Как проверить, существует ли файл на Python
  • comments powered by Disqus