Уведомления

Группа в Telegram: @pythonsu

#1 Март 26, 2013 14:55:23

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

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

Хорошо. Так как test_function будет выглядеть? Я хочу оставить елементы списка по маске типа *abc* в любом месте названия файла.

Офлайн

#2 Март 26, 2013 15:01:04

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

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

> Использую следующую функцию для построения списка вообще всех файлов:

Зачем он тебе? Создай для обхода каталогов рекурсивную функцию, фильтруй файлы в каждом подкаталоге и сразу их копируй.

Вот тебе пример рекурсивного копирования. Фильтрацию сам делай.
http://python.su/forum/topic/5393/?page=1#post-34988



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Март 26, 2013 15:05:04)

Офлайн

#3 Март 26, 2013 15:13:00

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

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

evgen34
Хорошо. Так как test_function будет выглядеть? Я хочу оставить елементы списка по маске типа *abc* в любом месте названия файла.
def test_function(path):
    #получить имя
    return #'abc' содержится в имени
Думаю, ты сам справишься.

Офлайн

#4 Март 26, 2013 17:48:12

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

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

Rodegast, спасибо, ты помог со вторым вопросом - теперь я знаю как копировать эти файлы.
Только я так и не понял, как организовать фильтрацию. О filter() нашел только недоступную для моего понимания информацию, документация тоже очень скудная и на английском. Подкинули бы мне пример, чтобы я своими глазами увидел.
Как, например, в списке

['Волга','Гантели','гараж','вертолет']
оставить только те, в которых содержится сочетание букв ‘га’ в любом регистре.

Офлайн

#5 Март 26, 2013 21:39:26

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

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

filter(lambda x: x.upper().find(u"ГА") > -1,[u'Волга',u'Гантели',u'гараж',u'вертолет'])



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Март 27, 2013 03:03:56

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

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

Похоже ТС нечто такое хотел:

import os, fnmatch
def locate(pattern, root=os.curdir):
    for path, dirs, files in os.walk(os.path.abspath(root)):
        for filename in fnmatch.filter(files, pattern):
            yield os.path.join(path, filename)
# пример использования
for fname in locate("*abc*"):
    print(fname)



Офлайн

#7 Март 27, 2013 10:45:06

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

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

Rodegast,pyuser, СПАСИБА!

Офлайн

#8 Март 27, 2013 10:47:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

evgen34
Rodegast,pyuser, СПАСИБА!
СПАСИБА на этом форуме выражается в нажатии зеленой кнопочки со знаком плюсика.



Офлайн

#9 Март 27, 2013 11:07:54

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

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

Это само собой

Офлайн

#10 Март 28, 2013 10:41:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

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

evgen34
Как, например, в списке
['Волга','Гантели','гараж','вертолет']
оставить только те, в которых содержится сочетание букв ‘га’ в любом регистре.
>>> import re
>>> 
>>> lst = ['Волга','Гантели','гараж','вертолет']
>>> 
>>> pat = re.compile(r'га', re.I)
>>> out = list(filter(pat.search, lst))
>>> print(out)
['Волга', 'Гантели', 'гараж']
>>>



Отредактировано py.user.next (Март 28, 2013 10:42:06)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version