Как вывести список всех файлов в директории?
Описание проблемы:
Я пытаюсь перечислить все файлы в указанной директории с помощью Python и добавить их в список. У меня есть некоторые базовые знания о работе с файлами в Python, но, к сожалению, я не знаю, как правильно реализовать эту задачу.
Вот что я уже пробовал:
import os
directory = 'путь/к/вашей/директории'
files_list = []
# Здесь я не уверен, как правильно перебрать файлы
for file in os.listdir(directory):
# Как добавить файлы в список?
files_list.append(file)
print(files_list)
Однако после выполнения данного кода я получаю список, включая и папки. Кроме того, мне еще нужно добавить некоторую проверку на тип файла, чтобы включить только файлы, а не директории.
Можете посоветовать, как правильно реализовать данную задачу? Спасибо!
4 ответ(ов)
Вызов функции os.listdir("somedirectory")
вернет список всех файлов и директорий в каталоге "somedirectory".
Вот однострочное решение для получения только списка файлов (без подкаталогов):
filenames = next(os.walk(path))[2]
Если вам нужны абсолютные пути к этим файлам, вы можете использовать следующий код:
paths = [os.path.join(path, fn) for fn in next(os.walk(path))[2]]
Получение полных путей к файлам из директории и всех её поддиректорий
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
Конечно! Вот перевод на русский с использованием стиля ответа на 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
Если у вас есть дополнительные вопросы или вам нужна помощь, не стесняйтесь спрашивать!
Как создать каталог и все отсутствующие родительские каталоги?
Как получить полный путь к директории текущего файла?
Импорт модулей из родительской папки
Получение списка всех подпапок в текущем каталоге
Как перебрать файлы в указанной директории?