Si el archivo se ajusta en la memoria, se puede intentar algo como esto:
f = open('somefile.txt')
lines = f.read().splitlines()
for current_line, next_line in zip(lines, lines[1:]):
print current_line
print next_line
print '-------'
El código anterior, básicamente, lee todas las líneas y utiliza zip
para crear una lista de tuplas que contiene la línea actual y el siguiente uno.
Editar: Como alternativa, para archivos largos, puede utilizar itertools
biblioteca de la siguiente manera:
import itertools
f = open('somefile.txt')
i1, i2 = itertools.tee(f)
lines = itertools.izip(i1, itertools.islice(i2, 1, None))
for current_line, next_line in lines:
print current_line
print next_line
print '-------'
En este caso:
itertools.tee
se utiliza para crear dos iteradores indenpendent (uno para la corriente línea y uno para la línea siguiente) que utilizan el iterador de archivo original.
itertools.slice
se utiliza para iniciar el siguiente iterador de línea en la segunda línea.
itertools.izip
se utiliza para unir los resultados de ambos iteradores línea por línea en una tupla.
Edición 2: Como sugiere @eyquem, también puede abrir el archivo dos veces:
import itertools
f = open('somefile.txt')
g = open('somefile.txt')
lines = itertools.izip(f, itertools.islice(g, 1, None))
for current_line, next_line in lines:
print current_line
print next_line
print '-------'
¿O puedo de alguna manera verificar si la siguiente línea existe antes de intentar leerla? –
¿Qué quiere decir con 'ponerlo en la línea actual'? ¿Desea modificar una línea grabada en el disco duro con los datos presentes en la línea de delante? – eyquem