Спасибо, я все еще в шоке, что context_diff больше, чем file2. Кажется, что diff сказал бы что-то вроде «add» print »j =« + j 'в позиции 235 »в любом внутреннем синтаксисе, который он хотел использовать. И вы можете сделать .restore из context_diff?

ал что-то вроде того, что, как я считаю, делают системы управления изменениями, они сравнивают два файла и сохраняют небольшую разницу при каждом изменении файла. Я читал эту страницу:http://docs.python.org/library/difflib.html и это не погружается в мою голову, по-видимому.

Я пытался воссоздать это в несколько простой программе, показанной ниже, но мне кажется, что мне не хватает того, что в Delta содержится как минимум столько же, сколько в исходном файле, и даже больше.

Разве не возможно добраться только до чистых изменений? Надеюсь, причина, по которой я спрашиваю, очевидна - для экономии места на диске.
Я мог бы просто сохранить весь кусок кода каждый раз, но было бы лучше сохранить текущий код один раз, чем небольшие различия изменений.

Я также все еще пытаюсь выяснить, почему многие функции difflib возвращают генератор вместо списка, в чем здесь преимущество?

Будет ли работать difflib для меня - или мне нужно найти более профессиональный пакет с большим количеством функций?

# 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

Спасибо!

ОБНОВИТЬ:

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

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

----- ПОКАЗАТЬ КОНТЕКСТДИФФ -----

* 5,9 **

 print "HIJ"

 print "JKL"

 print "Hello World"

печать "j =" + j

печать "XYZ"

--- 5,9 ----

 print "HIJ"

 print "JKL"

 print "Hello World"

 print "XYZ"
печать "Конец"

Еще одно обновление:

В старые времена Panvalet, библиотекаря, инструментов управления исходным кодом для мэйнфрейма, вы могли создать набор изменений, подобный этому:

++ADD 9
   print "j=" + j 

Это просто означает добавление строки (или строк) после строки 9. Затем есть такие слова, как ++ REPLACE или ++ UPDATE.http://www4.hawaii.gov/dags/icsd/ppmo/Stds_Web_Pages/pdf/it110401.pdf

Ответы на вопрос(1)

Ваш ответ на вопрос