2009-10-16 2 views
25

나는 두 단어의 덩어리가 있는데, 어떤 단어/행이 파이썬에서 추가/제거/수정되었는지 봅니다 (위키의 Diff 출력과 비슷합니다).Python에서 꽤 diff html을 생성합니다.

나는 difflib.HtmlDiff를 시도했지만 출력량이 적습니다.

두 세트의 텍스트 청크의 diff에 대해 깔끔하게 보이는 HTML을 생성하는 Python (또는 외부 라이브러리)의 방법이 있습니까? (뿐만 아니라 라인 레벨뿐만 아니라, 단어/라인 내에서 문자 수정)

답변

25

에 의해 차이를 확인 Google의 도서관

+0

은 .ZIP 다운로드 링크는 지금 (404) :( –

0

이 우선 시도 lxml.html에 의해 HTML을 모두 정리하고,이 diff-match-patchdiff_prettyHtml()있다 difflib

16

일반적으로 일부 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을 가져 와서 본문을 추출하고 CSS를 많이 사용하는 자체 필기체 HTML 블록 앞에 접두사를 붙입니다. 나는 또한 아마 전설 표를 벗겨 내고 그것을 맨 위로 옮기거나 div에 넣어서 CSS가 그렇게 할 수있게 할 것이다.

실제로, 더 나은 HTML을 생성하고 프로젝트에 다시 기여할 수 있도록 difflib 모듈 (파이썬으로 작성 됨)을 수정하는 것에 대해 진지하게 고려할 것입니다. CSS 전문가가 귀하를 도우려는 사람이거나 혼자있는 사람이라면, 이것을 고려하십시오.

+1

누군가가 당신의 제안을 구현 제공합니다. HtmlDiff 그냥 HTML 테이블을 작성 make_table() 메소드가 있습니다. 그래서 사용자가 추가 할 수 있습니다 자신의 CSS를 사용하여 그것을 가장 잘 표현할 수 있습니다. 수락 된 답변과 비교할 때이 내용이 포함되어 있습니다 (py 2.4). –

1

내 대답 사본은 here입니다.


무엇 DaisyDiff (사용 가능한 JavaPHP vesions)에 대한.

다음 기능은 정말 좋은이다 : "야생에서"찾을 수 있습니다 잘못된 형식의 HTML과

  • 작품.
  • diffing은 XML 트리보다 HTML에서 더 전문화되어 있습니다. 텍스트 노드의 일부를 변경해도 전체 노드가 변경되지는 않습니다.
  • 기본 비주얼 diff 이외에 HTML 소스는 일관되게 diffed 수 있습니다.
  • 변경 사항에 대한 설명을 쉽게 제공합니다.
  • 기본 GUI를 사용하면 키보드 바로 가기 및 링크를 통해 수정 사항을 쉽게 탐색 할 수 있습니다.
2

저는 최근에 파이썬 스크립트를 게시했습니다 : diff2HtmlCompare (스크린 샷 링크를 따르십시오). 후드에서 difflib을 감싸고 구문 강조를 위해 pygments를 사용합니다.

0

구글 솔기에서 라이브러리가 더 이상 활성 개발이없는 것으로, 나는 GitHub의 페이지에서 diff_py

를 사용하는 것이 좋습니다 :

파이썬으로 작성된 것입니다 간단한은 diff 도구입니다. diff 결과는 콘솔 또는 html 파일로 인쇄 할 수 있습니다. (나는 종종 파이썬의 경우 발견하면)