Я хочу выяснить различия 2 (или 3 файла, если это возможно) построчно. Утилиты Diff могут сделать это, однако это дает неточные результаты. Потому что 2 файла имеют точное количество строк, равное "134". Но diff дает мне "Добавленные линии" и "Удаленные линии". Однако это неправильно, они имеют одинаковое количество строк, нет добавленных или удаленных строк.
В текстовых файлах, в которых я хочу найти различия, написаны только цифры, может быть, поэтому этот алгоритм не работает. Я не мог найти какой-либо вариант, чтобы предотвратить это, хотя я могу ошибаться, я имею в виду, что должен быть вариант, но, опять же, я не смог найти.
Это то, что я получаю (5 утра. Текст против 6 часов, есть огромная проблема):
Это то, что я хочу (6 утра.txt против 7 утра. Txt, все еще есть проблемы):
Редактировать:
После того, как я понял, что для этого нет утилиты, я справился сам. Я почти сделал то же самое, что и RedGrittyBrick. Этот скрипт имитирует утилиту diff, поэтому я (или вы) можете использовать ее с diff2html.
Чтобы использовать его с diff2html, просто измените строку
diff_stdout = os.popen("diff %s" % string.join(argv[1:]), "r")
в
diff_stdout = os.popen("script.py %s" % string.join(argv[1:]), "r")
и назовите этот скрипт как хотите (для запуска требуется Python 2.x , например diff2html):
import sys
f1=open(sys.argv[1],"r")
f1_read=f1.readlines()
f1.close()
f2=open(sys.argv[2],"r")
f2_read=f2.readlines()
f2.close()
changed={}
first_c = ""
for n in range(len(f1_read)):
if f1_read[n]!=f2_read[n]:
if first_c == "":
first_c=n+1
changed[first_c]=n+1
else:
first_c=""
#Let's imitate diff-utils...
for (x, y) in changed.items():
print "%d,%dc%d,%d" % (x,y,x,y)
for i in range(x,y+1):
sys.stdout.write("< %s" % f1_read[i-1])
print "---"
for i in range(x,y+1):
sys.stdout.write("> %s" % f2_read[i-1])
Окончательные результаты: