Re: [Python-es] RE: [Python-es] Duda un poco básica ¿RTFM? ;-)

Chema Cortes chemacortes en wanadoo.es
Jue Ago 22 15:16:39 CEST 2002


Ahora que he visto un poco más el código, veo que compilas innecesariamente la expresión regular dentro del bucle:

> #!/usr/bin/python
> import re, string
> my_file = open('amaya', 'r')
> line_num = 0
> #i = 0
> #j = i + 1
> 
> i = j = 0
> 
> my_log = []
> for line in my_file:
>         line_num  = line_num + 1
>         row_elem  = string.split(line)
>         date1     = row_elem[0] + " " + row_elem[1]
>         date2     = row_elem[2]
>         match_pat = re.compile(r'(SRC=[0-9.]+)[\t ](DST=[0-9.]+)[\t ](.*TCP|UDP)[\t ](SPT=[0-9]+)[\t ](DPT=[0-9]+)[\t ](SEQ=[0-9]+)[\t ](ACK=[0-9]+)')

No es necesario que esté aquí. Sácala fuera del bucle. Si compilas es para ganar tiempo. También podrías incluir las fechas dentro de la expresión regular, usando '\s' para los espacios en blanco que separan palabras.

>         pattern   = match_pat.search(line)
>         src_addr  = pattern.group(1)
>         dst_addr  = pattern.group(2)
>         src_port  = pattern.group(4)
>         dst_port  = pattern.group(5)
>         sequence  = pattern.group(6)
>         ack_seq   = pattern.group(7)
>         param     = [line_num, date1, date2, src_addr, dst_addr, src_port, dst_port, sequence, ack_seq]

También puedes evitar leer grupo a grupo. Mira el siguiente código:

match_pat = re.compile(r'(\S+\s\S+)\s(\S+)\s(SRC=[0-9.]+)[\t ](DST=[0-9.]+)[\t ](.*TCP|UDP)[\t ](SPT=[0-9]+)[\t ](DPT=[0-9]+)[\t ](SEQ=[0-9]+)[\t ](ACK=[0-9]+)')

for line in my_file:
  pattern = match_pat.search(line)
  my_log.append(pattern.groups())

¿Más sencillo, no? Además tiene la ventaja de que puedes cambiar los grupos de la expresión regular, y seguiría funcionando.


Saludos,
-- 
Chema Cortes (chemacortes en wanadoo.es)
_____________________________________________________________________
Horas ilimitadas para leer y enviar correos con Tarifa Plana Wanadoo 
¡¡ desde las 3 de la tarde!!
Compruébalo en http://www.wanadoo.es/acceso-internet





Más información sobre la lista de distribución Python-es