Как вывести список файлов в каталоге на Python

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

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU
  • os.listdir('dir_path'): возвращает список файлов и каталогов, присутствующих в указанном пути к каталогу
  • os.walk('dir_path'): позволяет рекурсивно получить список файлов в каталоге и подкаталогах
  • os.scandir('path'): возвращает записи каталога вместе с информацией об атрибутах файлов
  • glob.glob('pattern'): позволяет получить список файлов и папок, имена которых соответствуют определенному шаблону

Как вывести список всех файлов в каталоге

Получить список файлов каталога проще простого! Используйте функции listdir() и isfile() модуля os:

  1. Импортируйте модуль os. Этот модуль помогает нам работать с функциональностью Python, зависящей от операционной системы. Модуль os предоставляет функции для взаимодействия с операционной системой.
  2. Используйте функцию os.listdir(). Функция os.listdir('path') возвращает список, содержащий имена файлов и каталогов, присутствующих в директории, заданной в виде path.
  3. Итерация результата. Используйте цикл for для перебора файлов, возвращенных функцией listdir().
  4. Используйте функцию isfile(). В каждой итерации цикла используйте функцию os.path.isfile('path'), чтобы проверить, является ли текущий путь файлом или каталогом. Если это файл, то добавьте его в список. Эта функция возвращает True, если заданный путь является файлом. В противном случае она возвращает False.

Пример получения списка файлов каталога

Рассмотрим, как перечислить файлы папки account. Функция listdir() выводит список файлов только в текущей директории и игнорирует поддиректории.

Вариант 1. Получаем список только файлов, без имен вложенных директорий

import os

# folder path
dir_path = r'E:\\account\\'

# list to store files
res = []

# Iterate directory
for path in os.listdir(dir_path):
    # check if current path is a file
    if os.path.isfile(os.path.join(dir_path, path)):
        res.append(path)
print(res)

Вывод:

['profit.txt', 'sales.txt', 'sample.txt']

Здесь мы получили имена трех файлов.

Если вы знакомы с генераторными выражениями, вы можете сократить и упростить этот код.

Генераторное выражение:

import os

def get_files(path):
    for file in os.listdir(path):
        if os.path.isfile(os.path.join(path, file)):
            yield file

Затем просто вызывайте его, когда потребуется.

for file in get_files(r'E:\\account\\'): print(file)

Вариант 2. Получаем как файлы, так и вложенные каталоги

Чтобы получить содержимое каталога, вызовите функцию listdir('path') непосредственно для этого каталога:

import os

# folder path
dir_path = r'E:\\account\\'

# list file and directories
res = os.listdir(dir_path)
print(res)

Вывод:

['profit.txt', 'reports_2021', 'sales.txt', 'sample.txt']

Мы получили те же три файла, что и в первом случае, плюс каталог reports_2021.

Вывод списка всех файлов в каталоге и подкаталогах при помощи os.walk()

Функция os.walk() возвращает генератор, который создает кортеж значений (current_path, директории в current_path, файлы в current_path).

Примечание: Используя функцию os.walk(), мы можем перечислить все каталоги, подкаталоги и файлы в заданном каталоге.

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

Например, вызов os.walk('path') даст два списка для каждой директории, которую он посетит. Первый список содержит файлы, а второй – каталоги.

Рассмотрим пример для перечисления всех файлов в каталоге и подкаталогах:

from os import walk

# folder path
dir_path = r'E:\\account\\'

# list to store files name
res = []
for (dir_path, dir_names, file_names) in walk(dir_path):
    res.extend(file_names)
print(res)

Вывод:

['profit.txt', 'sales.txt', 'sample.txt', 'december_2021.txt']

Примечание: Добавьте break внутри цикла, чтобы прекратить рекурсивный поиск файлов в подкаталогах:

from os import walk

# folder path
dir_path = r'E:\\account\\'
res = []
for (dir_path, dir_names, file_names) in walk(dir_path):
    res.extend(file_names)
    # don't look inside any subdirectory
    break
print(res)

Использование os.scandir() для получения файлов каталога

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

Эта функция возвращает итератор объектов os.DirEntry, который содержит имена файлов.

Пример:

import os

# get all files inside a specific folder
dir_path = r'E:\\account\\'
for path in os.scandir(dir_path):
    if path.is_file():
        print(path.name)

Вывод:

profit.txt
sales.txt
sample.txt

Модуль Glob для вывода списка файлов каталога

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

Например, чтобы получить все файлы каталога dir_path, мы будем использовать шаблон dir_path/*.*. Здесь *.* означает файл с любым расширением.

Давайте посмотрим, как перечислить файлы из каталога с помощью модуля glob.

import glob

# search all files inside a specific folder
# *.* means file name with any extension
dir_path = r'E:\account\*.*'
res = glob.glob(dir_path)
print(res)

Вывод:

['E:\\account\\profit.txt', 'E:\\account\\sales.txt', 'E:\\account\\sample.txt']

Примечание: Если вы хотите перечислить и файлы из подкаталогов, то установите атрибут recursive в True.

Пример:

import glob

# search all files inside a specific folder
# *.* means file name with any extension
dir_path = r'E:\demos\files_demos\account\**\*.*'
for file in glob.glob(dir_path, recursive=True):
    print(file)

Вывод:

E:\account\profit.txt
E:\account\sales.txt
E:\account\sample.txt
E:\account\reports_2021\december_2021.txt

Получение списка файлов при помощи модуля pathlib

Начиная с Python 3.4, мы можем использовать модуль pathlib, который предоставляет обертку для большинства функций ОС.

  • Импортируйте модуль pathlib. Этот модуль предлагает классы и методы для обработки путей к файловой системе и получения данных, связанных с файлами, для различных операционных систем.
  • Затем используйте pathlib.Path('path') для построения пути к каталогу
  • Затем используйте функцию iterdir() для перебора всех записей в каталоге
  • В конце проверьте, является ли текущая запись файлом, используя функцию path.isfile()

Пример:

import pathlib

# folder path
dir_path = r'E:\\account\\'

# to store file names
res = []

# construct path object
d = pathlib.Path(dir_path)

# iterate directory
for entry in d.iterdir():
    # check if it a file
    if entry.is_file():
        res.append(entry)
print(res)

Перевод статьи Vidhal «Python List Files in a Directory».

1 комментарий к “Как вывести список файлов в каталоге на Python”

  1. Пингбэк: Поиск текста в нескольких файлах на Python - pythonturbo

Оставьте комментарий

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