Как перебрать файлы в указанной директории?
Я хочу пройтись по всем файлам с расширением .asm
в указанной директории и выполнить с ними определенные действия.
Как это можно сделать эффективно?
5 ответ(ов)
Этот код будет итерировать по всем вложенным файлам, а не только по непосредственным детям директории:
import os
for subdir, dirs, files in os.walk(rootdir):
for file in files:
# print(os.path.join(subdir, file))
filepath = subdir + os.sep + file
if filepath.endswith(".asm"):
print(filepath)
В данном случае используется функция os.walk()
, которая рекурсивно проходит по всем подкаталогам заданного корневого каталога (rootdir
). На каждой итерации она возвращает кортеж, содержащий путь к текущему подкаталогу (subdir
), список подкаталогов (dirs
) и список файлов (files
). Затем, во вложенном цикле, происходит проверка каждого файла на наличие расширения .asm
, и при совпадении путь к файлу выводится на экран.
Вот как я перебираю файлы в Python:
import os
path = 'путь/к/вашей/папке'
folder = os.fsencode(path)
filenames = []
for file in os.listdir(folder):
filename = os.fsdecode(file)
if filename.endswith( ('.jpeg', '.png', '.gif') ): # укажите нужные вам типы файлов...
filenames.append(filename)
filenames.sort() # теперь у вас есть имена файлов, и вы можете что-то с ними сделать
НИ ОДИН ИЗ ЭТИХ МЕТОДОВ НЕ ГАРАНТИРУЕТ ПРЕДСКАЗУЕМЫЙ ПОРЯДОК ИТЕРАЦИИ
Да, это действительно непредсказуемо. Обратите внимание, что я сортирую имена файлов, что важно, если порядок файлов имеет значение, например, для кадров видео или при сборе данных, зависимых от времени. Убедитесь, что в именах файлов есть индексы!
Конечно! Если вы хотите создать пользовательский конструктор для DirectoryIndex
, который будет принимать путь и автоматически извлекать содержимое директории, вы можете сделать это следующим образом. Я добавлю класс с собственным __init__
, который будет использовать os.walk
. Смотрите пример:
import collections
import os
class DirectoryIndex:
def __init__(self, input_path):
self.root, self.dirs, self.files = next(os.walk(input_path))
# Пример использования
directory_index = DirectoryIndex('.')
for file_name in directory_index.files:
file_path = os.path.join(directory_index.root, file_name)
print(file_path) # Выводим полный путь к файлам
Теперь при создании экземпляра DirectoryIndex
, вы можете просто передать путь к директории, и он автоматически извлечет корень, подкаталоги и файлы. Если вам нужны дополнительные изменения или улучшения, не стесняйтесь добавлять свои комментарии!
Я действительно люблю использовать директиву scandir
, встроенную в библиотеку os
. Вот рабочий пример:
import os
i = 0
with os.scandir('/usr/local/bin') as root_dir:
for path in root_dir:
if path.is_file():
i += 1
print(f"Полный путь: {path} и просто имя: {path.name}")
print(f"{i} файлов успешно просканировано.")
Этот код проходит по всем элементам в каталоге /usr/local/bin
, проверяет, является ли элемент файлом, и выводит его полный путь и имя. В конце он сообщает, сколько файлов было успешно просканировано.
Похоже, что вас интересует более простой способ перебора файлов в директории с использованием Python 2.7. Вот как я бы это сделал. Замените DIRECTORY_TO_LOOP
на нужную вам директорию:
import os
DIRECTORY_TO_LOOP = '/var/www/files/'
for root, dirs, files in os.walk(DIRECTORY_TO_LOOP, topdown=False):
for name in files:
print(os.path.join(root, name))
Этот код использует модуль os
и функцию os.walk()
, чтобы пройти по всем поддиректориям и файлам указанной директории. topdown=False
означает, что мы сначала обрабатываем файлы в поддиректориях, а затем сами поддиректории. os.path.join(root, name)
объединяет путь к директории и имя файла для получения полного пути.
Как создать каталог и все отсутствующие родительские каталоги?
Как вывести список всех файлов в директории?
Как получить полный путь к директории текущего файла?
Как пройтись по двум спискам параллельно?
Получение списка всех подпапок в текущем каталоге