Python Difflib Deltas e Compare Ndiff

Eu estava procurando fazer algo parecido com o que acredito que os sistemas de controle de alterações fazem, eles comparam dois arquivos e salvam uma pequena diferença cada vez que o arquivo é alterado. Estive lendo esta página:http://docs.python.org/library/difflib.html e não está afundando na minha cabeça, aparentemente.

Eu estava tentando recriar isso em um programa um pouco simples mostrado abaixo, mas o que parece estar faltando é que os Delta contêm pelo menos tanto quanto o arquivo original e muito mais.

Não é possível obter apenas as mudanças puras? A razão pela qual pergunto é esperançosamente óbvia - para economizar espaço em disco.
Eu poderia salvar o pedaço inteiro de código de cada vez, mas seria melhor salvar o código atual uma vez, depois pequenas diferenças das alterações.

Também estou tentando descobrir por que muitas funções difflib retornam um gerador em vez de uma lista. Qual é a vantagem aí?

O difflib funcionará para mim - ou eu preciso encontrar um pacote mais profissional com mais recursos?

# 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

Obrigado!

ATUALIZAR:

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

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

----- MOSTRAR CONTEXTODIFF -----

* 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"
print "O fim"

Outra atualização:

Nos velhos tempos do Panvalet, um bibliotecário, ferramentas de gerenciamento de código-fonte para o mainframe, era possível criar um conjunto de alterações como este:

++ADD 9
   print "j=" + j 

O que significa simplesmente adicionar uma linha (ou linhas) após a linha 9. Em seguida, existem palavras como ++ REPLACE ou ++ UPDATE.http://www4.hawaii.gov/dags/icsd/ppmo/Stds_Web_Pages/pdf/it110401.pdf

questionAnswers(3)

yourAnswerToTheQuestion