[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