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

Amaya amaya en debian.org
Jue Ago 22 13:57:04 CEST 2002


Hernan Martinez Foffani dijo:
> ¡que buena decision la de tu empresa! :-D

Sí, el día que además se pasen a Debian será el sitio ideal para trabajar :-)))

> ¿el tutorial no te alcanza? por la regexp que escribiste no pareces que seas
> "nuevita" en programación, no?  (el tutorial puede ser algo duro para los que
> nunca programaron.)

No, el tutorial me parece excelente, pero me siento como si dieran algo por
sabido, mira el tipo de preguntas que hago :-)

Respecto a mi experiencia programando... me considero bastante mediocre :-)
Soy de letras, autodidacta, y además no tengo mucha experiencia.

> no uses "file" como nombre de variable, en la versión 2.2 es un tipo de datos
> nuevo.

Gracias, lo rectifico.

> ¿como funcionó esto? ¡¡¡te debió dar error!!!!

Cierto, copié una versión mala del script ;-)

> i en la rhs no está definida todavia.

¿Qué es rhs?

> ¿no sería mas sencillo: my_file.append(param) ?

Seguramente. A eso me refiero cuando digo que me considero bastante mediocre. A
que tiro 10 líneas para cosas que se pueden hacer en una... Pero estoy empeñada
a aprender python como sea :-)

> mmm... aquí no estás incrementando i (ni j).

Yap. 

> si my_file fuera una lista de listas, sería:
> my_file[0][1]

¿Y esto está en el tutorial? Debo andar ciega total :-)
Gracias.

El script queda así:

#!/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]+)')
        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]
#       my_log.insert (line_num, param)
        my_log.append(param)
my_file.close()

while i < line_num:
        print my_log[i]
#       while j < len(param):
#       print my_log[i][j]
#               j = j + 1 
#               i = i + 1
        i = i + 1

Ahora me imprime esto:

[arodrigo en cuelebre iptables]$ python amaya.py 
[1, 'Aug 22', '09:35:23', 'SRC=192.168.3.9', 'DST=192.168.3.11', 'SPT=37192', 'DPT=80', 'SEQ=1899023795', 'ACK=0']
[2, 'Aug 22', '09:35:23', 'SRC=192.168.3.9', 'DST=192.168.3.12', 'SPT=37193', 'DPT=80', 'SEQ=1906765896', 'ACK=0']
[3, 'Aug 22', '09:35:33', 'SRC=192.168.3.9', 'DST=192.168.3.11', 'SPT=37194', 'DPT=80', 'SEQ=1915899003', 'ACK=0']
[4, 'Aug 22', '09:35:33', 'SRC=192.168.3.9', 'DST=192.168.3.12', 'SPT=37195', 'DPT=80', 'SEQ=1911844646', 'ACK=0']

Y estoy encantada :-))

Pero si descomento y "arreglo" el último while:

while i < line_num:
        while j < len(param):
	        print my_log[i][j]
                j = j + 1 
                i = i + 1

Entonces se me queja:

[arodrigo en cuelebre iptables]$ python amaya.py 
1
Aug 22
09:35:33
SRC=192.168.3.9
Traceback (most recent call last):
  File "amaya.py", line 32, in ?
    print my_log[i][j]
IndexError: list index out of range

Me imagino que i o j se están dando un viaje, pero... ¿a dónde?

Si en cambio pruebo esto (porque programo de oído ;-)))):

while i < line_num:
        while j < len(param):
                print my_log[i][j]
                j = j + 1
        i = i + 1 

Me imprime esto:
[arodrigo en cuelebre iptables]$ python amaya.py 
1
Aug 22
09:35:23
SRC=192.168.3.9
DST=192.168.3.11
SPT=37192
DPT=80
SEQ=1899023795
ACK=0

Pero sólo la primera línea... ¿?

Otra cosa, ¿No existe algo como i++ y j++ para incrementar un contador?

Gracias de nuevo.

--
Revolutions don't require corporate support  


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