Leyendo linea especifica
Chema Cortes
pych3m4 en gmail.com
Mar Nov 24 01:21:59 CET 2009
El día 16 de noviembre de 2009 16:40, Daniel Cabrera
<cabrerachaparro en gmail.com> 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
Más información sobre la lista de distribución Python-es