Por partes:

2012/11/20 Carlos Agulló Calvo <cm.agu...@gmail.com>:
> 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);

Por supuesto que este es el lugar, para eso está.


> def abrirmes():
>     mes=open('ABRIL2005.txt','r')
> [...]
> def leermes():
>     fila=mes.readline()
> [...]
> abrirmes()
> leermes()

abrirmes() en efecto está abriendo el archivo, pero tienes que tener
en cuenta que "mes" es una variable local. Hagas lo que hagas con una
variable dentro de una función, al salir de la función se va a morir.


def f():
   x = 2
   print  'x es', x

x = 1
f() # Devuelve 2
print 'Ahora, x es', x # Devuelve 1.

Si quieres conservar tu estructura de funciones, tienes que devolver
los valores.

def f():
   x = 2
   return x

x = f()
print x  # Ahora sí que da 2.

Pero, ¿seguro que quieres hacer tantas funciones tan atómicas? Es
mucho más legible un código más continuo.


> 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]

¡Ah! Errorcillo sutil. readline lee UNA línea, por lo que infile es
una cadena con la primera línea del archivo. for line in infile itera
sobre los elementos de la cadena (cada letra). Y claro, una letra no
tiene elementos del 1 al 8.

Lo que tú quieres hacer  es usar readlines(), con s al final, o usar
directamente el archivo. for line in mes

Tienes otro fallo: if line[1:8]==0303201 está comparando una cadena de
texto con un número, eso nunca va a ser verdad. Tienes que hacer if
line[1:8]=='0303201':

Para evitar equivocarte contando, puedes usar el método startswith de string:

if line.startswith('0303201', start = 1)

(El 1 es para saltarte el ")
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a