34

Как вывести список всех файлов в директории?

13

Описание проблемы:

Я пытаюсь перечислить все файлы в указанной директории с помощью Python и добавить их в список. У меня есть некоторые базовые знания о работе с файлами в Python, но, к сожалению, я не знаю, как правильно реализовать эту задачу.

Вот что я уже пробовал:

import os

directory = 'путь/к/вашей/директории'
files_list = []

# Здесь я не уверен, как правильно перебрать файлы
for file in os.listdir(directory):
    # Как добавить файлы в список?
    files_list.append(file)

print(files_list)

Однако после выполнения данного кода я получаю список, включая и папки. Кроме того, мне еще нужно добавить некоторую проверку на тип файла, чтобы включить только файлы, а не директории.

Можете посоветовать, как правильно реализовать данную задачу? Спасибо!

4 ответ(ов)

9

Вызов функции os.listdir("somedirectory") вернет список всех файлов и директорий в каталоге "somedirectory".

1

Вот однострочное решение для получения только списка файлов (без подкаталогов):

filenames = next(os.walk(path))[2]

Если вам нужны абсолютные пути к этим файлам, вы можете использовать следующий код:

paths = [os.path.join(path, fn) for fn in next(os.walk(path))[2]]
1

Получение полных путей к файлам из директории и всех её поддиректорий

import os

def get_filepaths(directory):
    """
    Эта функция генерирует имена файлов в иерархии директорий, 
    проходя через дерево сверху вниз или снизу вверх. Для каждой 
    директории в дереве, корнем которого является указанная директория (включая саму директорию), 
    она возвращает кортеж из трех элементов (dirpath, dirnames, filenames).
    """
    file_paths = []  # Список, который будет хранить все полные пути к файлам.

    # Проходим по дереву.
    for root, directories, files in os.walk(directory):
        for filename in files:
            # Объединяем строки, чтобы сформировать полный путь к файлу.
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)  # Добавляем путь в список.

    return file_paths  # Понятно само по себе.

# Запускаем указанную функцию и сохраняем результаты в переменной.   
full_file_paths = get_filepaths("/Users/johnny/Desktop/TEST")

  • Путь, который я предоставил в вышеуказанной функции, содержит 3 файла — два из них находятся в корневой директории, а третий в поддиректории под названием "SUBFOLDER". Теперь вы можете выполнять такие действия, как:

  • print(full_file_paths), что выведет список:

    • ['/Users/johnny/Desktop/TEST/file1.txt', '/Users/johnny/Desktop/TEST/file2.txt', '/Users/johnny/Desktop/TEST/SUBFOLDER/file3.dat']

Если хотите, вы можете открыть и прочитать содержимое или сосредоточиться только на файлах с расширением ".dat", как в приведенном ниже коде:

for f in full_file_paths:
    if f.endswith(".dat"):
        print(f)

/Users/johnny/Desktop/TEST/SUBFOLDER/file3.dat

0

Конечно! Вот перевод на русский с использованием стиля ответа на StackOverflow:

def list_files(path):
    # Возвращает список имен (с расширением, без полного пути) всех файлов 
    # в папке по указанному пути
    files = []
    for name in os.listdir(path):
        if os.path.isfile(os.path.join(path, name)):
            files.append(name)
    return files

Этот код определяет функцию list_files, которая принимает на вход путь к директории и возвращает список названий всех файлов в этой директории. В процессе работы функция перебирает все элементы в заданной папке с помощью os.listdir(path), проверяет, является ли каждый элемент файлом с помощью os.path.isfile(), и добавляет его имя в список files, если это правда. В итоге возвращается список имен файлов без полного пути. Не забудьте импортировать модуль os в начале вашего скрипта, чтобы код заработал:

import os

Если у вас есть дополнительные вопросы или вам нужна помощь, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь