[Python-es] Duda de principiante

Kiko kikocorreoso en gmail.com
Mar Nov 20 16:28:08 CET 2012


Joder, reescribo un poco el correo porque he puesto alguna cosa mal...

El 20 de noviembre de 2012 16:23, Kiko <kikocorreoso en gmail.com> escribió:

>
>
> El 20 de noviembre de 2012 15:41, Carlos Agulló Calvo <cm.agullo en gmail.com
> > escribió:
>
> Hola de nuevo, tengo un par de dudas básicas más (por cierto, si este no
>> es el sitio apropiado para mi nivel/poner dudas decidmelo); mi primera duda
>> es la siguiente:
>
>
> Este es el sitio apropiado para hablar de python. Si muestras que has
> intentado solucionar tu problema, has probado alternativas y que aún así no
> te sale la gente será muy amigable y te intentará ayudar. Si pides dudas
> que se resuelven googleando de forma sencilla la gente anda muy ocupada
> para hacer lo que ya deberías haber hecho tú y no se mostrarán tan
> amigables con ese tipo de dudas.
>
> Otra cosa, no uses el mismo hilo para preguntar dudas nuevas. Intenta
> titular la duda de la forma más descriptiva, también procura preguntar una
> duda en cada hilo puesto que hace que seguir la lista o buscar cosas sea
> más sencillo.
>
>
>>
>> me he creado un programita que es el siguiente:
>> def abrirmes():
>>     mes=open('ABRIL2005.txt','r')
>>
>> def abrirestacion():
>>     est_0303201=open('est_0303201.txt','a')
>>
>> def leermes():
>>     fila=mes.readline()
>>
>> def escribirestacion():
>>     est_0303201.write(fila)
>>
>> def cerrararchivos():
>>     mes.close
>>     est_0303201.close
>>
>>
>> abrirmes()
>> abrirestacion()
>> leermes()
>> escribirestacion()
>> cerrararchivos()
>>
>
en algunas de esas funciones que creas debes usar *return* para devolver
cosas y que otras partes del código puedan acceder. Lo normal es meter eso
que devuelves en una variable, por ejemplo:

def abrirmes():
    mes=open('coords.txt','r')
    return mes

mes = abrirmes()
print mes.readline()


>> El problema que me da es que me dice que en *leermes *no está definida
>> la variable *mes, *pero a la hora de ejecutar, primero llamo a abrirmes
>> y luego a leermes, por lo que debería estar disponible, no?
>>
>
No es el único problema que te dará porque hay más cosas mal.


> si me dejo de vainas y lo hago así:
>>
>> mes=open('ABRIL2005.txt','r')
>>
>> est_0303201=open('est_0303201.txt','a')
>>
>> fila=mes.readline()
>>
>> est_0303201.write(fila)
>>
>> mes.close
>> est_0303201.close
>>
>> No me da ningún problema.
>>
>
Esta forma es bastante más natural que lo que estás usando arriba...


> Ni otra duda es que las lineas del archivo ABRIL2005.txt tienen la
>> siguiente forma:
>>
>> "0303201";1/4/2005
>> 0:01:00;2;0;0;0;0;143;-127;-127;2;0;0;0;-127;2;-127;-127;-127;-127;0
>> "0303202";1/4/2005
>> 0:01:00;2;0;0;0;0;0;-127;-127;0;0;0;0;-127;0;-127;-127;-127;-127;0
>> ...
>> y quiero que si el primer código es 0303201 me escriba la línea en el
>> archivo est_0303201 y si no, pues que pase de línea;
>> lo he intentado de la siguiente manera:
>>
>> infile=mes.readline()
>> for line in infile:
>>     if line[1:8]==0303201:
>>         archivo_0303201.write(line)
>>
>> y me da error al leer line[1:8]
>>
>> cómo podría arreglarlo?
>>
>> mil gracias por adelantado
>>
>>
Con readline solo lees una línea, con lo que haces estás metiendo toda la
línea en la variable infile como una cadena, cuando haces el for sobre la
cadena en realidad estás extrayendo cada elemento de la cadena y line no es
lo que tú esperas. cambia readline por readline*s* y sigue a partir de ahí.

Ya nos vas contando.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20121120/7f61deca/attachment.html>


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