[Python-es] error bucle for
Carlos Zuniga
carlos.zun en gmail.com
Jue Nov 22 14:38:05 CET 2012
2012/11/22 Carlos Agulló Calvo <cm.agullo en gmail.com>:
> he creado el siguiente programita:
>
> mes_entrada=raw_input ('Escribe un mes de entrada:')
>
> mes=open(mes_entrada,'r')
>
> lista_estaciones=[]
>
>
> for line in mes:
> if line[1:8] in lista_estaciones:
> pass
> else:
> lista_estaciones.append(line[1:8])
>
>
> for i in lista_estaciones:
> num_est=str(i)
> nombre_estacion='est_' + num_est + '.txt'
> archivo_estacion=open(nombre_estacion,'a')
>
> for line in mes:
> print num_est
> if line [1:8]==num_est:
> archivo_estacion.write(line)
> else:
> pass
> archivo_estacion.close
>
> mes.close
>
> y el segundo bucle me falla, puesto que le digo que para cada linea del
> archivo mes me mire los caracteres del 2 al 8 y si es igual al num_est me lo
> escriba en el archivo_estacion; pero los archivos est_XXX.txt que me crea se
> me quedan vacíos.
>
> Como se ve, he metido un print num_est dentro del bucle para que me
> apareciera en pantalla algo, pero no me aparece en la pantalla nada de nada
> ¿sabéis por qué?
>
Como dice Antonio, estas al final del archivo así que el segundo bucle
no contiene nada sobre que iterar. Añade mes.seek(0) antes del segundo
bucle.
A parte quería añadir que close es un método, por lo que deberías usar
mes.close(), y mucho mejor practica, usar with:
with open(archivo, 'r') as mes:
for line in mes:
...
Con with te olvidas de tener que cerrar el archivo ya que python lo hace por tí.
Saludos
--
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.
Más información sobre la lista de distribución Python-es