Создание довольно diff html в Python
У меня есть два куска текста, которые я хотел бы сравнить и посмотреть, какие слова/строки были добавлены/удалены/изменены в Python (аналогично выходу Diff Вики).
Я пробовал difflib.HtmlDiff, но это выход меньше, чем довольно.
есть ли способ в Python (или внешней библиотеке), который будет генерировать чистый HTML из двух наборов текстовых фрагментов? (не только уровень строки, но и изменения слов/символов в строке)
6 ответов
обычно, если вы хотите, чтобы какой-то HTML отображался более красивым способом, вы делаете это, добавляя CSS.
например, если вы создаете HTML следующим образом:
import difflib
import sys
fromfile = "xxx"
tofile = "zzz"
fromlines = open(fromfile, 'U').readlines()
tolines = open(tofile, 'U').readlines()
diff = difflib.HtmlDiff().make_file(fromlines,tolines,fromfile,tofile)
sys.stdout.writelines(diff)
затем вы получаете зеленый фон на добавленных линиях, желтый на измененных линиях и красный на удаленных. Если бы я делал это, я бы взял сгенерированный HTML, извлек тело и префикс его с моим собственным рукописным блоком HTML с большим количеством CSS, чтобы он выглядел хорошо. Я бы также, вероятно, убрал таблицу легенд и переместите его наверх или поместите в div, чтобы CSS мог это сделать.
на самом деле, я бы серьезно рассмотрел просто исправление модуля difflib (который написан на python), чтобы создать лучший HTML и внести его обратно в проект. Если у вас есть эксперт CSS, чтобы помочь вам или сами, пожалуйста, подумайте об этом.
недавно я опубликовал скрипт python, который делает именно это:diff2HtmlCompare (перейдите по ссылке на скриншоте). Под капотом он обертывает difflib и использует pygments для подсветки синтаксиса.
копия моего ответа из здесь.
насчет DaisyDiff (Java и PHP версии доступны).
следующие функции действительно хороши:
- работает с плохо сформированным HTML, который можно найти "в дикой природе".
- разница более специализирована в HTML, чем XML-дерево отличается. Меняется часть текста узла не приведет весь узел измененный.
- в дополнение к визуальному различию по умолчанию, источник HTML может быть различен когерентно.
- легко понять, описания изменений.
- GUI по умолчанию позволяет легко просматривать изменения с помощью сочетаний клавиш и ссылок.
Так .. библиотека из Google швов, чтобы больше не иметь активной разработки, я предлагаю использовать diff_py
со страницы github:
простой инструмент diff, который написан Python. Результат diff может быть напечатан в консоли или в html-файл.