Leer la línea anterior en un archivo python.

Necesito obtener el valor de la línea anterior en un archivo y compararlo con la línea actual, ya que estoy iterando a través del archivo. El archivo es ENORME, por lo que no puedo leerlo entero o acceder aleatoriamente a un número de línea con linecache porque la función de biblioteca todavía lee todo el archivo en la memoria de todos modos.

EDITAR Lo siento tanto que olvidé la mención de que tengo que leer el archivo al revés.

EDIT2

He probado lo siguiente:

  f = open("filename", "r") for line in reversed(f.readlines()): # this doesn't work because there are too many lines to read into memory line = linecache.getline("filename", num_line) # this also doesn't work due to the same problem above. 

Solo guarda lo anterior cuando pases al siguiente.

 prevLine = "" for line in file: # do some work here prevLine = line 

Esto almacenará la línea anterior en la línea prevLine mientras estás haciendo un bucle

Editar aparentemente OP necesita leer este archivo al revés:

Después de una hora de investigación, fallé varias veces para hacerlo dentro de las limitaciones de memoria.

Aquí tienes, Lim, ese tipo sabe lo que está haciendo, aquí está su mejor idea:

Enfoque general # 2: lea el archivo completo, almacene la posición de las líneas

Con este enfoque, también lee el archivo completo una vez, pero en lugar de almacenar el archivo completo (todo el texto) en la memoria, solo almacena las posiciones binarias dentro del archivo donde comenzó cada línea. Puede almacenar estas posiciones en una estructura de datos similar a la que almacena las líneas en el primer enfoque.

Cuando quiera leer la línea X, debe volver a leer la línea del archivo, comenzando en la posición que almacenó para el inicio de esa línea.

Pros: Casi tan fácil de implementar como el primer enfoque. Contras: puede llevar un tiempo leer archivos grandes.

@Lim, así es como lo escribiría (responder a los comentarios)

 def do_stuff_with_two_lines(previous_line, current_line): print "--------------" print previous_line print current_line my_file = open('my_file.txt', 'r') if my_file: current_line = my_file.readline() for line in my_file: previous_line = current_line current_line = line do_stuff_with_two_lines(previous_line, current_line) 

Escribiría un generador simple para la tarea:

 def pairwise(fname): with open(fname) as fin: prev = next(fin) for line in fin: yield prev,line prev = line 

O bien, puede utilizar la receta de pairwise de itertools :

 def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return itertools.izip(a, b)