Re: Leyendo linea especifica
Chema Cortes <[email protected]> Tue, 24 Nov 2009 01:21:59 +0100
| Newsgroups | gmane.comp.python.general.castellano |
|---|---|
| Message-ID | <[email protected]> |
El día 16 de noviembre de 2009 16:40, Daniel Cabrera <[email protected]> escribió: > Como puedo hacer para poder leer una linea especifica usando las funciones > I/O de Python? Lo malo de leer líneas de texto es que no sabes dónde acaba una línea y empieza la siguiente hasta que las lees. Posicionarse en una línea requiere leer todas las anteriores (aunque hay sistemas operativos que facilitan esta tarea). > Por ejemplo tengo un archivo plano con 10 lineas pero deseo empezar a leer > desde la linea 5. Estoy abriendo el archivo usando: > > f.open("archivo","r") > f.readline(5); > for line in f: > print line, > f.close() > > Pero no se posiciona en la linea deseada, no encuentro un manual donde se > explique como hacer eso. Usas mal el argumento de .readline() ya que no es para indicar el número de líneas a leer. Otro detalle, que no se suele tener en cuenta, es que no es bueno mezclar lecturas con readline() con las de next() (ésta última se emplea cuando el fichero actúa como iterador y emplea una caché que despista al resto de funciones de lectura). Si el fichero es pequeño, la solución de leerlo por completo en memoria y descartar las primeras líneas es la mejor opción. Si el fichero es muy grande, puedes optar por leer las primeras líneas y descartarlas, o bien por emplear islice #primera opción (adornada) f=open("archivo","r") for i,linea in enumerate(f): if i<5: continue print linea #segunda opción from itertools import islice f=open("archivo","r") it=islice(f,5,None) for linea in it: print linea También podría haber una tercera opción, quizás la que recomendaría usar: f=open("archivo","r") it=(linea for i,linea in enumerate(f) if i>=5) for linea in it: print linea _______________________________________________ Lista de correo Python-es http://listas.aditel.org/listinfo/python-es FAQ: http://listas.aditel.org/faqpyes