[Python-es] Duda de principiante

Kiko kikocorreoso en gmail.com
Mar Nov 20 16:23:38 CET 2012


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 rehuses 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')

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 es meter toda la línea
en la variable infile como una cadena, cuando haces el for sobre la cadena
en realidad haces 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/5722573a/attachment.html>


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