Question

J'ai deux morceaux de texte que je voudrais comparer et voir quels mots / lignes ont été ajoutées / supprimés / modifiés en Python (similaire à la sortie Diff d'un Wiki).

Je l'ai essayé difflib.HtmlDiff mais sa sortie est inférieure à peu.

Est-il possible en Python (ou bibliothèque externe) qui générerait propre recherche HTML de la diff de deux séries de morceaux de texte? (Et pas seulement le niveau de la ligne, mais aussi mot / modifications de caractère dans une ligne)

Était-ce utile?

La solution

Il y a diff_prettyHtml() dans le diff match-patch bibliothèque de Google.

Autres conseils

En général, si vous voulez un peu HTML pour rendre une plus jolie façon, vous le faites en ajoutant CSS.

Par exemple, si vous générez le code HTML comme ceci:

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)

vous obtenez sur fond vert, jaune lignes ajoutées sur les lignes modifiées et rouges supprimés. Si je faisais cela, je prendrais prendre le code HTML généré, extraire le corps, et le préfixe avec mon propre bloc manuscrit de HTML avec beaucoup de CSS pour le faire bien paraître. Je voudrais aussi probablement déshabille la table de la légende et le déplacer vers le haut ou le mettre dans un div afin que CSS peut le faire.

En fait, je envisager sérieusement de fixer simplement le module difflib (qui est écrit en python) pour générer un meilleur HTML et contribuer revenir au projet. Si vous avez un expert en CSS pour vous aider ou êtes-vous, s'il vous plaît envisager de le faire.

Je récemment un script python qui fait ceci: diff2HtmlCompare (suivez le lien pour une capture d'écran) . Sous le capot, il enveloppe difflib et utilise pygments pour la coloration syntaxique.

essayez d'abord nettoyer les deux HTML par lxml.html, et vérifier la différence par difflib

Une copie de ma propre réponse de ici .


Qu'en est- DaisyDiff ( Java et PHP vesions disponibles).

Les fonctionnalités suivantes sont vraiment sympa:

  • Fonctionne avec HTML mal formé qui peut être trouvé « dans la nature ».
  • Le diffing est plus spécialisé en HTML que diffère de l'arbre XML. Changer une partie d'un nœud de texte ne causera pas l'ensemble du nœud à modifier.
  • En plus de la diff visuelle par défaut, la source HTML peut être cohérente mis au format.
  • Fournit facile à comprendre une description des changements.
  • L'interface graphique par défaut permet une navigation facile des modifications grâce à des raccourcis clavier et des liens.

Depuis la .. bibliothèque de coutures google ne pas avoir de développement actif plus, je suggère d'utiliser diff_py

Dans la page GitHub:

  

L'outil simple diff qui est écrit par Python. Le résultat de diff peut être imprimé dans la console ou fichier html.

  

non seulement le niveau de la ligne, mais aussi des modifications mot / caractère dans une ligne

xmldiff semble être un joli paquet pour cette fin, en particulier lorsque vous avez XML / HTML pour comparer . En savoir plus dans leur .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top