Хитрости Python: как составить список только файлов (не каталогов) — подробное руководство

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

Метод 1: использование os.listdir() и os.path.isfile()
Модуль os в Python предоставляет простой способ работы с файлами и каталогами. Мы можем использовать функцию os.listdir(), чтобы получить список всех элементов (файлов и каталогов) в каталоге. Чтобы отфильтровать каталоги и сохранить только файлы, мы можем объединить это с функцией os.path.isfile(). Вот пример:

import os
def list_files(directory):
    files = [file for file in os.listdir(directory) if os.path.isfile(os.path.join(directory, file))]
    return files
# Usage
files = list_files('/path/to/directory')
print(files)

Метод 2: использование os.scandir() и is_file()
Начиная с Python 3.5, в модуле os появилась новая функция под названием os.scandir(). Он обеспечивает более эффективный способ перебора элементов в каталоге. Мы можем использовать его вместе с методом is_file() объекта DirEntry, чтобы отфильтровать каталоги и сохранить только файлы. Вот пример:

import os
def list_files(directory):
    files = [entry.name for entry in os.scandir(directory) if entry.is_file()]
    return files
# Usage
files = list_files('/path/to/directory')
print(files)

Метод 3: использование pathlib.Path() и.is_file()
Модуль pathlib, представленный в Python 3.4, обеспечивает объектно-ориентированный подход для обработки путей к файлам. Мы можем использовать класс Path() и его метод.is_file(), чтобы проверить, является ли данный путь файлом. Вот пример:

from pathlib import Path
def list_files(directory):
    files = [file.name for file in Path(directory).iterdir() if file.is_file()]
    return files
# Usage
files = list_files('/path/to/directory')
print(files)

Метод 4: использование glob.glob() и os.path.isfile()
Модуль glob предоставляет мощный способ поиска файлов с использованием подстановочных знаков. Мы можем использовать функцию glob.glob() для сопоставления файлов в каталоге и функцию os.path.isfile() для фильтрации каталогов. Вот пример:

import glob
import os
def list_files(directory):
    files = [file for file in glob.glob(os.path.join(directory, '*')) if os.path.isfile(file)]
    return files
# Usage
files = list_files('/path/to/directory')
print(files)

В этой статье мы рассмотрели несколько способов вывода списка только файлов (а не каталогов) в Python. Мы рассмотрели различные подходы, используя такие модули, как os, pathlib и glob. Используя эти методы, вы можете легко отфильтровать каталоги и сосредоточиться на работе только с файлами. Не забудьте выбрать метод, который лучше всего подходит для вашего конкретного случая использования. Приятного кодирования!