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).