Найти - Пользователи
Полная версия: Поиск файлов по папкам с использованием фильтра
Начало » Центр помощи » Поиск файлов по папкам с использованием фильтра
1 2
evgen34
Всем привет. Не могу понять что использовать для фильтрации списка файлов. Передо мной стоит следующая задача: рекурсивно проверить все файлы в папке и её подпапках на наличие в имени заданного мной сочетания символов; если такие файлы есть, то надо их все скопировать в одну папку.
Использую следующую функцию для построения списка вообще всех файлов:
pathfile(adr):
    listoffiles = []
    for d, dirs, files in os.walk(adr):
        for f in files:
            path = os.path.join(d,f)
            listoffiles.append(path)
    return listoffiles
Пытаюсь сортировать по маске, но могу сделать это только зная имя файла целиком.
Прошу подсказать что можно использовать для удаления из этого списка элементов несоответствующих условию.
И ещё одно: может быть не нужно создавать список всех файлов, а можно создавать его уже с использованием фильтра?
Спасибо.
Shaman
встроенная filter и модуль re помогут
evgen34
Это уже к списку нужно применять? Или во время выполнения цикла?
Shaman
[proc(d, dirs, files) for d, dirs, files in os.walk(adr)]
Это список, или цикл?
evgen34
Shaman, объясни пожалуйста, что делает это добавление
[proc(d, dirs, files) ... ]
Я все равно не понял где и как использовать фильтр
Shaman
evgen34
объясни пожалуйста, что делает это добавление
Это просто условная функция, обрабатывающая данные.
filter(function, iterable)
Конструирует список из из тех элементов iterable для которых function возвращает true. iterable может быть кортежем, контейнером, который поддерживает итерирование, или итератором. Если iterable является строкой, или tuple, результат так же будет соответствующего типа; во всех остальных случаях результат всегда список. Если function указано None, из списка удаляются все элементы, приводимые к False.
evgen34
Пробую делать так:
filter('*abc*',pathfile(adr))
говорит, что это не строка. Как эту штуку применить ко списку?
Shaman
filter(test_function, listoffiles)
evgen34
А test_function что должна делать? Здесь вроде lambda должно быть? А где re использовать?
Shaman
evgen34
А test_function что должна делать?
Проверять соответствие имени файла условиям. Например маске.
evgen34
Здесь вроде lambda должно быть
Нет “lambda должно быть” в питоне. Лямбда-конструкция применяется для конструирования простых функций на месте, там, где ожидается функция в качестве аргумента.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB