Подтвердить что ты не робот

Создать довольно diff html в Python

У меня есть два фрагмента текста, которые я хотел бы сравнить и посмотреть, какие слова/строки были добавлены/удалены/изменены в Python (аналогично Wiki Diff Output).

Я пробовал difflib.HtmlDiff, но его результат меньше, чем симпатичный.

Есть ли способ в Python (или внешней библиотеке), который будет генерировать чистый выглядящий HTML разницы двух наборов текстовых фрагментов? (не только линейный уровень, но и модификация слова/символа внутри строки)

4b9b3361

Ответ 2

Как правило, если вы хотите, чтобы какой-либо 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, который поможет вам или вам самому, подумайте об этом.

Ответ 3

Недавно я опубликовал python script, который делает именно это: diff2HtmlCompare (перейдите по ссылке для скриншота). Под капотом он обертывает difflib и использует пигменты для подсветки синтаксиса.

Ответ 4

Копия моего собственного ответа от здесь.


Как насчет DaisyDiff (Java и PHP доступно vesions).

Следующие функции действительно приятные:

  • Работает с плохо сформированным HTML, который можно найти "в дикой природе".
  • Дифференциал более специализирован в HTML, чем дерево XML. Изменение части текста node не приведет к изменению всего node.
  • В дополнение к визуальному различию по умолчанию, HTML-источник может быть разграничен когерентно.
  • Легко понять описания изменений.
  • Графический интерфейс по умолчанию позволяет легко просматривать изменения с помощью сочетаний клавиш и ссылок.

Ответ 5

попробуйте сначала очистить оба HTML по lxml.html, и проверить разницу с помощью difflib

Ответ 6

Поскольку библиотека.. из google-швов больше не имеет активного развития, я предлагаю использовать diff_py

На странице github:

Простой инструмент diff, который написан Python. Результат diff можно распечатать в консоли или в html файле.