Уведомления

Группа в Telegram: @pythonsu

#1 Март 26, 2013 13:41:27

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

Всем привет. Не могу понять что использовать для фильтрации списка файлов. Передо мной стоит следующая задача: рекурсивно проверить все файлы в папке и её подпапках на наличие в имени заданного мной сочетания символов; если такие файлы есть, то надо их все скопировать в одну папку.
Использую следующую функцию для построения списка вообще всех файлов:

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
Пытаюсь сортировать по маске, но могу сделать это только зная имя файла целиком.
Прошу подсказать что можно использовать для удаления из этого списка элементов несоответствующих условию.
И ещё одно: может быть не нужно создавать список всех файлов, а можно создавать его уже с использованием фильтра?
Спасибо.

Офлайн

#2 Март 26, 2013 13:49:06

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

встроенная filter и модуль re помогут

Офлайн

#3 Март 26, 2013 13:50:57

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

Это уже к списку нужно применять? Или во время выполнения цикла?

Офлайн

#4 Март 26, 2013 13:55:15

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

[proc(d, dirs, files) for d, dirs, files in os.walk(adr)]
Это список, или цикл?

Офлайн

#5 Март 26, 2013 14:27:58

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

Shaman, объясни пожалуйста, что делает это добавление

[proc(d, dirs, files) ... ]
Я все равно не понял где и как использовать фильтр

Отредактировано evgen34 (Март 26, 2013 14:29:00)

Офлайн

#6 Март 26, 2013 14:37:54

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

evgen34
объясни пожалуйста, что делает это добавление
Это просто условная функция, обрабатывающая данные.
filter(function, iterable)
Конструирует список из из тех элементов iterable для которых function возвращает true. iterable может быть кортежем, контейнером, который поддерживает итерирование, или итератором. Если iterable является строкой, или tuple, результат так же будет соответствующего типа; во всех остальных случаях результат всегда список. Если function указано None, из списка удаляются все элементы, приводимые к False.

Отредактировано Shaman (Март 26, 2013 14:38:19)

Офлайн

#7 Март 26, 2013 14:40:20

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

Пробую делать так:

filter('*abc*',pathfile(adr))
говорит, что это не строка. Как эту штуку применить ко списку?

Офлайн

#8 Март 26, 2013 14:43:00

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

filter(test_function, listoffiles)

Офлайн

#9 Март 26, 2013 14:45:33

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

А test_function что должна делать? Здесь вроде lambda должно быть? А где re использовать?

Офлайн

#10 Март 26, 2013 14:49:06

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Поиск файлов по папкам с использованием фильтра

evgen34
А test_function что должна делать?
Проверять соответствие имени файла условиям. Например маске.
evgen34
Здесь вроде lambda должно быть
Нет “lambda должно быть” в питоне. Лямбда-конструкция применяется для конструирования простых функций на месте, там, где ожидается функция в качестве аргумента.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version