Форум сайта python.su
Вот встала такая задача, есть лог,
1239739203 192.168.69.226 43652 195.20.224.156 53 57
1239739203 192.168.70.114 64732 74.196.166.114 35837 134
1239739203 192.168.70.110 5195 117.13.15.157 16001 134
1239739203 192.168.70.90 18231 91.204.68.1 53 72
1239739203 192.168.171.110 1711 94.100.177.6 110 502
onet = re.compile('192\.168\.70\.')
for line in logfile:
oip = line.split()[1]
if onet.match(oip):
file.write(line)
Офлайн
есть Ipy
Но регэкспом значительно быстрее, лучше напишите функцию которая генерит регэксп по подсетке.
ЗЫ: есть еще
IPlib
ipaddr-py, но все равно в вашем случае регэксп самый быстрый вариант
Отредактировано (Апрель 23, 2009 12:46:01)
Офлайн
Думаю можно засунуть лог в базу и выгребать нужное с помощью sql like. Только это хороший вариант если в одном и том же логе нужно искать разные маски. Тогда самая длинная процедура будет засовывание всего в базу.
Офлайн
Ferromanlike не использует индексы. если засовывать в базу, тогда уж лучше переводить ip в число и искать накладывая маску, а постгресе есть и нативный тип для ip и проверка на принадлежность к подсети.
Думаю можно засунуть лог в базу и выгребать нужное с помощью sql like. Только это хороший вариант если в одном и том же логе нужно искать разные маски. Тогда самая длинная процедура будет засовывание всего в базу.
Офлайн
А если так?
logfile = open('log.txt', 'r')
result = []
subnet = '192.168.69.226'
for i in logfile.readline():
i = i.strip()
n = i.split()
if n[1] == subnet:
result.append(i)
Отредактировано (Апрель 23, 2009 14:08:37)
Офлайн
in.codeeлучше использовать COPY в потгрессе
Правда не в курсе насколько это быстрее smile Первое, что в голову пришло.
COPY table_name FROM filename;
Отредактировано (Апрель 23, 2009 16:09:32)
Офлайн
документация на COPY
http://www.postgresql.org/docs/8.3/interactive/sql-copy.html
Офлайн
PooH
Да, как вариант.
Офлайн
def grep(string,list):
import re
expr = re.compile(string)
for text in list:
match = expr.search(text)
if match != None:
return match.string
grep("192.168.70",re.split("\n", open(r'log.txt').readlines())))
Офлайн
:)
Питон - это конечно хорошо…
Но иногда нужно смотреть и по сторонам…
http://www.lexa.ru/programs/grepip.html
Офлайн