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

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

В статье представлены различные методы поиска файлов с определённым расширением только на 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')]
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

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