LINUX.ORG.RU

[glob][python] Два вопроса

 


0

0

1) Почему пайтоновский glob не понимает фигурные скобки? Python 2.5.4 на оффтопике и 2.5.2 на дебиане.

>>> glob.glob('aaa12?.txt')
['aaa120.txt', 'aaa121.txt', 'aaa126.txt', 'aaa128.txt', 'aaa125.txt', 'aaa124.txt', 'aaa123.txt', 'aaa129.txt', 'aaa127.txt', 'aaa122.txt']
>>> glob.glob('aaa12{1,5,6}.txt')
[]

Через ls все нормально:

$ ls aaa12{1,5,6}.txt
aaa121.txt  aaa125.txt  aaa126.txt

2) Как отфильтровать одним выражением файлов с числовым индексом в определенном диапазоне, например от aaa123.txt до aaa128.txt?



Последнее исправление: Conficker (всего исправлений: 1)

По первому вопросу: допустимы только ? и *

>>> import glob
>>> print glob.glob.__doc__
Return a list of paths matching a pathname pattern.

    The pattern may contain simple shell-style wildcards a la fnmatch.
ksv
()

Второй вопрос - ИМХО - как-нибудь так:

[e for e in glob.glob("aaa12?.txt") if int(e[3:]) <= 128 and int(e[3:]) >= 123]

Не проверял, но идея должна быть понятна.

ksv
()
Ответ на: комментарий от Conficker

> Очень замутно

Конструкция вида [code][elem for elem in array if test(elem)][/code] является стандартной для питона. Создается список элементов, для которых выполняется test(elem). В примере запутано только условие, но даже оно не очень сложно выглядит.

Пробую перл.

Это такой сарказм? :) Особенно в связке с первой фразой :)

Спасибо за помощь.

Всегда пожалуйста.

ksv
()
Ответ на: комментарий от Conficker

Можешь еще руби попробовать, если перл не устроит ( ну мало ли, взял же ты по первой питон ).

Dir.glob ("aaa12{1,5,6}.txt")
=> ["aaa121.txt", "aaa125.txt", "aaa126.txt"]
volh ★★
()
Ответ на: комментарий от Conficker

Я кстати не догнал что имелось в виду под вторым вопросом.

Dir.glob("aaa12[5-7].txt").sort
=> ["aaa125.txt", "aaa126.txt", "aaa127.txt"]

?

ary
=> ["aaa127.txt", "aaa120.txt", "aaa126.txt", "aaa125.txt", "aaa121.txt"]
ary.grep(/2[5-7]/).sort
=> ["aaa125.txt", "aaa126.txt", "aaa127.txt"]

?

volh ★★
()
Ответ на: комментарий от volh

Я ошибся в примере. Диапазон может быть побольше, 114-146, где-то так.

Conficker
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.