Форум сайта python.su
Всем привет. Не могу понять что использовать для фильтрации списка файлов. Передо мной стоит следующая задача: рекурсивно проверить все файлы в папке и её подпапках на наличие в имени заданного мной сочетания символов; если такие файлы есть, то надо их все скопировать в одну папку.
Использую следующую функцию для построения списка вообще всех файлов:
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
Офлайн
встроенная filter и модуль re помогут
Офлайн
Это уже к списку нужно применять? Или во время выполнения цикла?
Офлайн
[proc(d, dirs, files) for d, dirs, files in os.walk(adr)]
Офлайн
Shaman, объясни пожалуйста, что делает это добавление
[proc(d, dirs, files) ... ]
Отредактировано evgen34 (Март 26, 2013 14:29:00)
Офлайн
evgen34Это просто условная функция, обрабатывающая данные.
объясни пожалуйста, что делает это добавление
filter(function, iterable)
Конструирует список из из тех элементов iterable для которых function возвращает true. iterable может быть кортежем, контейнером, который поддерживает итерирование, или итератором. Если iterable является строкой, или tuple, результат так же будет соответствующего типа; во всех остальных случаях результат всегда список. Если function указано None, из списка удаляются все элементы, приводимые к False.
Отредактировано Shaman (Март 26, 2013 14:38:19)
Офлайн
Пробую делать так:
filter('*abc*',pathfile(adr))
Офлайн
filter(test_function, listoffiles)
Офлайн
А test_function что должна делать? Здесь вроде lambda должно быть? А где re использовать?
Офлайн
evgen34Проверять соответствие имени файла условиям. Например маске.
А test_function что должна делать?
evgen34Нет “lambda должно быть” в питоне. Лямбда-конструкция применяется для конструирования простых функций на месте, там, где ожидается функция в качестве аргумента.
Здесь вроде lambda должно быть
Офлайн