Python Difflib Deltas y Comparar Ndiff

Estaba buscando hacer algo como lo que creo que hacen los sistemas de control de cambios, comparan dos archivos y guardan una pequeña diferencia cada vez que el archivo cambia. He estado leyendo esta página:http://docs.python.org/library/difflib.html y aparentemente no se está hundiendo en mi cabeza.

Estaba tratando de recrear esto en un programa algo simple que se muestra a continuación, pero lo que parece que me falta es que los Delta contienen al menos tanto como el archivo original, y más.

¿No es posible llegar solo a los cambios puros? Espero que la razón que pido sea obvia: para ahorrar espacio en disco.
Podría guardar todo el fragmento de código cada vez, pero sería mejor guardar el código actual una vez, luego pequeñas diferencias de los cambios.

También sigo tratando de entender por qué muchas funciones difflib devuelven un generador en lugar de una lista, ¿cuál es la ventaja?

¿Diflib funcionará para mí o necesito encontrar un paquete más profesional con más funciones?

# Python Difflib demo 
# Author: Neal Walters 
# loosely based on http://ahlawat.net/wordpress/?p=371
# 01/17/2011 

# build the files here - later we will just read the files probably 
file1Contents="""
for j = 1 to 10: 
   print "ABC"
   print "DEF" 
   print "HIJ"
   print "JKL"
   print "Hello World"
   print "j=" + j 
   print "XYZ"
"""

file2Contents = """
for j = 1 to 10: 
   print "ABC"
   print "DEF" 
   print "HIJ"
   print "JKL"
   print "Hello World"
   print "XYZ"
print "The end"
"""

filename1 = "diff_file1.txt" 
filename2 = "diff_file2.txt" 

file1 = open(filename1,"w") 
file2 = open(filename2,"w") 

file1.write(file1Contents) 
file2.write(file2Contents) 

file1.close()
file2.close() 
#end of file build 

lines1 = open(filename1, "r").readlines()
lines2 = open(filename2, "r").readlines()

import difflib

print "\n FILE 1 \n" 
for line in lines1:
  print line 

print "\n FILE 2 \n" 
for line in lines2: 
  print line 

diffSequence = difflib.ndiff(lines1, lines2) 

print "\n ----- SHOW DIFF ----- \n" 
for i, line in enumerate(diffSequence):
    print line

diffObj = difflib.Differ() 
deltaSequence = diffObj.compare(lines1, lines2) 
deltaList = list(deltaSequence) 

print "\n ----- SHOW DELTALIST ----- \n" 
for i, line in enumerate(deltaList):
    print line



#let's suppose we store just the diffSequence in the database 
#then we want to take the current file (file2) and recreate the original (file1) from it
#by backward applying the diff 

restoredFile1Lines = difflib.restore(diffSequence,1)  # 1 indicates file1 of 2 used to create the diff 

restoreFileList = list(restoredFile1Lines)

print "\n ----- SHOW REBUILD OF FILE1 ----- \n" 
# this is not showing anything! 
for i, line in enumerate(restoreFileList): 
    print line

¡Gracias!

ACTUALIZAR:

contextDiffSeq = difflib.context_diff(lines1, lines2) 
contextDiffList = list(contextDiffSeq) 

print "\n ----- SHOW CONTEXTDIFF ----- \n" 
for i, line in enumerate(contextDiffList):
    print line

----- MOSTRAR CONTEXTO DIFF -----

* 5,9 **

 print "HIJ"

 print "JKL"

 print "Hello World"

imprimir "j =" + j

imprimir "XYZ"

--- 5,9 ----

 print "HIJ"

 print "JKL"

 print "Hello World"

 print "XYZ"
imprimir "El fin"

Otra actualización:

En los viejos tiempos de Panvalet an Librarian, herramientas de administración de fuentes para el mainframe, se podía crear un conjunto de cambios como este:

++ADD 9
   print "j=" + j 

Lo que simplemente significa agregar una línea (o líneas) después de la línea 9. Luego hay palabras de palabras como ++ REPLACE o ++ UPDATE.http://www4.hawaii.gov/dags/icsd/ppmo/Stds_Web_Pages/pdf/it110401.pdf

Respuestas a la pregunta(3)

Su respuesta a la pregunta