[Python-es] Re: [Python-es] RE: [Python-es] Duda un poco básica ¿RTFM? ;-)
Chema Cortes
chemacortes en wanadoo.es
Jue Ago 22 14:26:21 CEST 2002
> Hernan Martinez Foffani dijo:
> > si my_file fuera una lista de listas, sería:
> > my_file[0][1]
>
> ¿Y esto está en el tutorial? Debo andar ciega total :-)
Al final de la sección 3.1.4, aunque casi no se ve.
> 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)
Por comentar un poco, el módulo string ya se está dejando de usar. Puedes emplear mejor los métodos del objeto:
row_elem = line.split()
> 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
Queda más elegante de esta forma:
for line in my_log:
print line
> 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:
Tienes que identar correctamente el incremento de 'i'
> 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
Aquí tenías bien identado 'i', pero deberías haber vuelto a poner 'j' a cero antes de empezar el segundo bucle.
i=0
while i < line_num:
j=0
while j < len(param):
print my_log[i][j]
j = j + 1
i = i + 1
Pero como mejor sería:
for line in my_log:
for elem in line:
print elem
Te evitarías todos los líos de usar índices.
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