9

Как перебрать файлы в указанной директории?

4

Я хочу пройтись по всем файлам с расширением .asm в указанной директории и выполнить с ними определенные действия.

Как это можно сделать эффективно?

5 ответ(ов)

2

Этот код будет итерировать по всем вложенным файлам, а не только по непосредственным детям директории:

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, и при совпадении путь к файлу выводится на экран.

0

Вот как я перебираю файлы в 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() # теперь у вас есть имена файлов, и вы можете что-то с ними сделать

НИ ОДИН ИЗ ЭТИХ МЕТОДОВ НЕ ГАРАНТИРУЕТ ПРЕДСКАЗУЕМЫЙ ПОРЯДОК ИТЕРАЦИИ

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

0

Конечно! Если вы хотите создать пользовательский конструктор для 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, вы можете просто передать путь к директории, и он автоматически извлечет корень, подкаталоги и файлы. Если вам нужны дополнительные изменения или улучшения, не стесняйтесь добавлять свои комментарии!

0

Я действительно люблю использовать директиву 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, проверяет, является ли элемент файлом, и выводит его полный путь и имя. В конце он сообщает, сколько файлов было успешно просканировано.

0

Похоже, что вас интересует более простой способ перебора файлов в директории с использованием 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) объединяет путь к директории и имя файла для получения полного пути.

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