Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 20, 2015 14:13:57

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

Подсчет словосочетаний в файлах

Shaman
У меня такое крутится:
Расширения надо подавать в функцию, иначе при поиске других файлов нельзя будет её использовать.

Shaman
for f in (_f for _f in fnames if _f.lower().endswith(('.doc', '.docx'))):
А генератор-то там зачем?



Отредактировано py.user.next (Авг. 20, 2015 14:25:41)

Офлайн

#2 Авг. 20, 2015 14:16:14

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

Подсчет словосочетаний в файлах

py.user.next
Расширения надо подавать в функцию, иначе при поиске других файлов нельзя будет её использовать.
Это подправленная копипаста - мне передавать ничего не нужно.
py.user.next
А генератор-то там зачем?
Экономия места на экране.

Отредактировано Shaman (Авг. 20, 2015 14:16:40)

Офлайн

#3 Авг. 20, 2015 14:23:51

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

Подсчет словосочетаний в файлах

Shaman
Это подправленная копипаста - мне передавать ничего не нужно.
Ну, а путь зачем передаётся тогда? ;) По такой логике надо и его зашить в функцию. (Чтобы потом её выкинуть при первом изменении условий.)

Shaman
Экономия места на экране.
Это шутка такая? :)) А то, что он память жрёт, ничего?



Офлайн

#4 Авг. 20, 2015 14:28:52

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

Подсчет словосочетаний в файлах

py.user.next
Ну, а путь зачем передаётся тогда?
Чтоб было Я не собираюсь яростно защищать сто строк кода.
py.user.next
Это шутка такая? ) А то, что он память жрёт, ничего?
Это тоже шутка? Генераторов бояться - в питоны не ходить. Не много они жрут.

Офлайн

#5 Авг. 20, 2015 14:33:58

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

py.user.next
, я малость слукавил на счет маски - она должна выглядеть вот так:
'Проект*тата*.doc*'
Переписал под себя и добавил fnmatch.
Я так понимаю, теперь что-то можно удалить из этого кода?

def get_files_ext(source, exts):
    exts = tuple(exts)
    #print(exts)
    for root, dirs, files in os.walk(source):
        for name in files:
            #if name.endswith(exts):
            if fnmatch.fnmatch(name, 'Проект*тата*.doc*'):
                yield os.path.join(root, name)
                 
def copy_to_dir(seq, dest):
    for i in seq:
        shutil.copy(i, dest)
        
def main():
    source=czk
    input_dir = czk
    output_dir = 'ЦЗК'
    extensions = ('Проект*тата*.doc*')
    files = get_files_ext(input_dir, extensions)
    copy_to_dir(files, output_dir)
 
if __name__ == '__main__':
    main()

Офлайн

#6 Авг. 20, 2015 14:45:09

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

Если мне нужен

doza_and
win32com
для версии 3.5 мне pywin скачивать надо?

Походу, надо…
ImportError: No module named 'win32com'

Отредактировано Kir@ (Авг. 20, 2015 14:48:27)

Офлайн

#7 Авг. 20, 2015 14:58:27

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

Подсчет словосочетаний в файлах

Shaman
Не много они жрут.
Генератор - это объект, там у него есть методы, переменные всякие.

Kir@
, я малость слукавил на счет маски - она должна выглядеть вот так:
'Проект*тата*.doc*'
Я так понимаю, теперь что-то можно удалить из этого кода?
Не, всё оставляешь, а снаружи из files выбираешь только “тата” перед передачей в copy_to_dir().
Если нужно что-то забубённое, то надо сделать другую функцию вместо get_files_ext(). Например, get_files_regex(), которая бы по регулярке выбирала имена.



Отредактировано py.user.next (Авг. 20, 2015 15:00:43)

Офлайн

#8 Авг. 20, 2015 14:59:36

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

Подсчет словосочетаний в файлах

py.user.next
Генератор - это объект, там у него есть методы, переменные всякие.
И что? Каждый if тоже память использует.

Офлайн

#9 Авг. 20, 2015 15:02:52

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

Подсчет словосочетаний в файлах

Shaman
И что? Каждый if тоже память использует.
Да, вообще-то, внутри генератора этих if'ов дофига и больше. К тому же у тебя в генераторе тоже if стоит, чтобы выбирать имена.



Офлайн

#10 Авг. 20, 2015 15:06:33

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

Подсчет словосочетаний в файлах

py.user.next
Да, вообще-то, внутри генератора этих if'ов дофига и больше. К тому же у тебя в генераторе тоже if стоит, чтобы выбирать имена.
Спасибо за информацию, Кэп! ) Для memory bounded и speed bounded задач лучше подобрать другой инструмент, а так на моём небольшом дисплее экономится одна сточка и четыре столбца. Почти везде вместо конструкции вида
for a in ... :
if a ... :
я пишу код с генератором и проблем не имею, а если начать экономить на генераторах, тогда придётся отказаться от большей части питоньей стандартной библиотеки.

Отредактировано Shaman (Авг. 20, 2015 15:44:35)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version