2012-09-28 28 views
15

Estoy leyendo en un archivo y me pregunto si hay una forma de leer la siguiente línea en un ciclo for.Obteniendo la siguiente línea en un archivo

actualmente estoy leyendo el archivo de la siguiente manera:

file = open(input,"r").read() 
for line in file.splitlines(): 
    line = doSomething() 

Entonces, ¿hay alguna forma de recuperar la siguiente línea del archivo en el que para el bucle de tal manera que pueda realizar alguna operación en la función doSomething()?

Gracias

Respuesta

30

Sólo bucle sobre el archivo abierto:

infile = open(input,"r") 
for line in infile: 
    line = doSomething(line, next(infile)) 

, ya que ahora utiliza el archivo como un iterador, puede llamar a la next() function sobre la variable infile en cualquier momento para recuperar una línea adicional .

Dos consejos adicionales:

  1. No llame a su variable de file; enmascara el objeto de tipo file incorporado en python. Lo llamé infile en su lugar.

  2. Puede usar el archivo abierto como administrador de contexto con la instrucción with. Se va a cerrar el archivo de forma automática cuando se hace:

    with open(input,"r") as infile: 
        for line in infile: 
         line = doSomething(line, next(infile)) 
    
+0

esto es mejor que mi solución de indexación ya que realmente incrementa el contador también ... –

+0

@Martijin: Una pequeña consulta: Usando 'next()' moverá el puntero a la siguiente línea, pero cuando el control regrese en el ciclo for, ¿volverá a leer la línea "siguiente" o pasará a la siguiente línea? – Konstant

+0

@ Konstant: al lado de la siguiente. El uso de un bucle 'for' también llama a' .next() ', y cada vez que lo hace, se devuelve una * nueva * línea hasta que el archivo finalice. –

6
file = open(input,"r").read() 
lines = file.read().splitlines() 
for i in range(len(lines)): 
    line = lines[i] 
    next_line = lines[i+1] 
+3

¿por qué? ... esto hace lo que se pidió ... La respuesta de Martjin está mejor otorgada, pero esto te da la siguiente línea (al menos ahora sí. le faltaba leer()) ... –

8

Creo que quiere decir que si usted está en la línea n, que desea ser capaz de acceder a la línea n + 1.

La forma más sencilla de hacerlo es reemplazar

for line in file.splitlines():

con

lines = file.readlines() 
for i in xrange(len(lines)): 

entonces se puede obtener la línea actual con lines[i] y la siguiente línea con lines[i+1]

la más manera pythonic es usar enumerar

lines = file.readlines() 
for index, line in enumerate(lines): 

ahora tiene la línea actual en "línea" como normalmente, pero también tiene el índice si desea encontrar una línea diferente en relación con ella.

+0

Martin publicó su respuesta mientras yo estaba peleando con el editor. El suyo es un poco más esbelto, pero aún vale la pena estar al tanto de la opción de enumerar. – BostonJohn

+0

Al encontrar esta respuesta en 2016, cabe señalar que 'xrange' no existe en Python 3 y que debe usarse 'rango' en su lugar. – Michael

Cuestiones relacionadas