Python File Handling

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

Spread the love

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

Оглавление

  1. Использование модуля glob
  2. Использование модуля os
  3. Использование pathlib для поиска в одном каталоге
  4. Рекурсивный поиск с помощью os.walk
  5. Рекурсивный поиск с помощью pathlib.rglob

1. Использование модуля glob

Модуль glob предлагает краткий способ поиска файлов, соответствующих заданному шаблону, в одном каталоге. Его функция glob() возвращает список путей, удовлетворяющих шаблону.


import glob

def find_files_with_extension_glob(directory, extension):
  """Находит файлы с заданным расширением используя glob.glob()."""
  return glob.glob(f"{directory}/*{extension}")

# Пример:
files = find_files_with_extension_glob("./my_directory", ".txt")
print(files)

2. Использование модуля os

Модуль os обеспечивает более тонкий контроль. os.listdir() перечисляет все записи в каталоге, позволяя настраивать фильтрацию.


import os

def find_files_with_extension_os(directory, extension):
  """Находит файлы с заданным расширением используя os.listdir()."""
  files = []
  for filename in os.listdir(directory):
    if filename.endswith(extension):
      files.append(os.path.join(directory, filename))
  return files

# Пример:
files = find_files_with_extension_os("./my_directory", ".txt")
print(files)

3. Использование pathlib для поиска в одном каталоге

Модуль pathlib обеспечивает объектно-ориентированный подход. Его метод glob() предлагает более чистый синтаксис, чем glob.glob().


from pathlib import Path

def find_files_with_extension_pathlib(directory, extension):
  """Находит файлы с заданным расширением используя pathlib.glob()."""
  return list(Path(directory).glob(f"*{extension}"))

# Пример:
files = find_files_with_extension_pathlib("./my_directory", ".txt")
print(files)

4. Рекурсивный поиск с помощью os.walk

Для поиска в подкаталогах os.walk() обходит дерево каталогов, позволяя проверять каждый файл на наличие нужного расширения.


import os

def find_files_recursive_os(directory, extension):
    """Рекурсивно находит файлы с заданным расширением используя os.walk()."""
    files = []
    for root, _, filenames in os.walk(directory):
        for filename in filenames:
            if filename.endswith(extension):
                files.append(os.path.join(root, filename))
    return files

# Пример:
files = find_files_recursive_os("./my_directory", ".txt")
print(files)

5. Рекурсивный поиск с помощью pathlib.rglob

Метод rglob() модуля pathlib предлагает наиболее элегантное решение для рекурсивного поиска.


from pathlib import Path

def find_files_recursive_pathlib(directory, extension):
  """Рекурсивно находит файлы с заданным расширением используя pathlib.rglob()."""
  return list(Path(directory).rglob(f"*{extension}"))

# Пример:
files = find_files_recursive_pathlib("./my_directory", ".txt")
print(files)

Не забудьте создать папку «my_directory» с некоторыми файлами .txt, чтобы примеры работали корректно. Выберите метод, который наилучшим образом соответствует вашему стилю кодирования и требованиям проекта. Для простого поиска в одном каталоге glob или pathlib.glob() являются отличным выбором. Для рекурсивного поиска pathlib.rglob() обеспечивает наиболее краткое и читаемое решение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *