una todas lineas linea leer las especifica archivo python file lines skip

especifica - leer todas las lineas de un archivo python



Salta el primer par de líneas al leer líneas en el archivo Python (8)

Quiero saltar las primeras 17 líneas mientras leo un archivo de texto.

Digamos que el archivo se ve como:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 good stuff

Solo quiero las cosas buenas. Lo que estoy haciendo es mucho más complicado, pero esta es la parte con la que estoy teniendo problemas.


Aquí hay un método para obtener líneas entre dos números de línea en un archivo:

import sys def file_line(name,start=1,end=sys.maxint): lc=0 with open(s) as f: for line in f: lc+=1 if lc>=start and lc<=end: yield line s=''/usr/share/dict/words'' l1=list(file_line(s,235880)) l2=list(file_line(s,1,10)) print l1 print l2

Salida:

[''Zyrian/n'', ''Zyryan/n'', ''zythem/n'', ''Zythia/n'', ''zythum/n'', ''Zyzomys/n'', ''Zyzzogeton/n''] [''A/n'', ''a/n'', ''aa/n'', ''aal/n'', ''aalii/n'', ''aam/n'', ''Aani/n'', ''aardvark/n'', ''aardwolf/n'', ''Aaron/n'']

Simplemente llámelo con un parámetro para obtener de la línea n -> EOF


Esta solución me ayudó a omitir el número de líneas especificadas por la variable linetostart . Obtendrá el índice (int) y la línea (cadena) si desea realizar un seguimiento de ellos también. En su caso, debe sustituir linetostart con 18, o asignar 18 a linetostart variable.

f = open("file.txt", ''r'') for i, line in enumerate(f, linetostart): #Your code


Puede utilizar una comprensión de lista para convertirla en una sola línea:

[fl.readline() for i in xrange(17)]

Más información sobre la comprensión de listas en PEP 202 y en la documentación de Python .


Si es una mesa.

pd.read_table("path/to/file", sep="/t", index_col=0, skiprows=17)


Si no quieres leer todo el archivo en la memoria de una vez, puedes usar algunos trucos:

Con el next(iterator) puede avanzar a la siguiente línea:

with open("filename.txt") as f: next(f) next(f) next(f) for line in f: print(f)

Por supuesto, esto es ligeramente feo, así que itertools tiene una mejor manera de hacerlo:

from itertools import islice with open("filename.txt") as f: # start at line 17 and never stop (None), until the end for line in islice(f, 17, None): print(f)


Use itertools.islice , comenzando en el índice 17. Se omitirán automáticamente las 17 primeras líneas.

import itertools with open(''file.txt'') as f: for line in itertools.islice(f, 17, None): # start=17, stop=None # process lines


Use una rebanada, como a continuación:

with open(''yourfile.txt'') as f: lines_after_17 = f.readlines()[17:]

Si el archivo es demasiado grande para cargar en la memoria:

with open(''yourfile.txt'') as f: for _ in range(17): next(f) for line in f: # do stuff


for line in dropwhile(isBadLine, lines): # process as you see fit

Demostración completa:

from itertools import * def isBadLine(line): return line==''0'' with open(...) as f: for line in dropwhile(isBadLine, f): # process as you see fit

Ventajas: Esto es fácilmente extensible a los casos en que sus líneas de prefijo son más complicadas que "0" (pero no son interdependientes).