Expresiones Regulares , ficheros, Python y problemas

lasizoillo lasizoillo en gmail.com
Vie Feb 15 16:18:15 CET 2008


El 15/02/08, inf200468 en ucf.edu.cu <inf200468 en ucf.edu.cu> escribió:
>
>
>  Hola:
>  ����������  tengo un
>  fichero log , donde sus lineas son algo como:
>
>
>  10.14.17.12 - - [06/Feb/2008:07:35:19 -0500] "GET /src/webmail.php
>  HTTP/1.1" 200 335 "http://correo/src/login.php" "Mozilla/4.0
>  (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727)"
>

Ok, tipicas de apache

>
>  patron_IP =
>  re.compile('[10-256]..[0-255]..[0-255]..[0-255]')
>  iterator = patron_IP.finditer
>  (linea)
>  for result in iterator:
>  ��  print
>  linea[result.start():result.end()]
>

No conocia esa forma de definir clases en las expresioner regulares :-O

>  pero nunca me devuelve la ip completa solo
>  10.14.17.1 y el 2 no lo da, es decir el ultimo numero, para la fecha escribi:
>

Tiene sentido, en el momento que encuentra el 1, para qué va a buscar más.
Mirate eso que dice del greedy http://docs.python.org/lib/re-syntax.html

Para la ip prueba r"^(?:[\d]+\.){3}[\d]+", que viene a significar
r"" -> No me escapes las contrabarras de dentro, que las uso en la regex
^ -> Inicio de cadena
(?:) -> Es un grupo, pero no lo guardes
\d -> Digito
[\d]+ -> Todos los digitos que te encuentres, pero al menos uno
\. -> Caracter punto
(?:[\d]+\.){3} -> 3 apariciones de un grupo (a no guardar) de digitos
(uno o mas) seguido de un punto

Cuesta entender las expresiones regulares, pero son muy potentes.
Aunque en este caso, quizá no necesites la potencia que dan. Puedes
hacer algo asi:
>>> a = "10.14.17.12 - - [06/Feb/2008:07:35:19 -0500] "
>>> a.split()
['10.14.17.12', '-', '-', '[06/Feb/2008:07:35:19', '-0500]']
>>> a.split()[0]
'10.14.17.12'
>>> a.split()[3][1:]
'06/Feb/2008:07:35:19'
>>> a.split()[3][1:12]
'06/Feb/2008'

Como esta separado por espacios, y la fecha va a tener un ancho fijo,
esta manera te sirve.

Con una regex y grupos, puedes recoger la ip y la fecha del tiron. En
una sola pasada.

Y cambiando de tercio. ¿Por que no llegan los envios nuevos que mando
a la lista y si las respuestas? ¿Es alguna movida (grey list o así)
anti-spam que me esta filtrando los mensajes nuevos?

Un saludo:

Javi
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


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