2009-10-16 29 views
25

Tôi có hai đoạn văn bản mà tôi muốn so sánh và xem từ/dòng nào đã được thêm/xóa/sửa đổi trong Python (tương tự với Đầu ra Khác của Wiki).Tạo html khá khác trong Python

Tôi đã thử difflib.HtmlDiff nhưng đầu ra của nó nhỏ hơn khá.

Có cách nào trong Python (hoặc thư viện bên ngoài) có thể tạo HTML tìm kiếm rõ ràng về sự khác biệt của hai bộ khối văn bản không? (Không chỉ là mức dòng, nhưng cũng từ/sửa đổi ký tự trong một dòng)

Trả lời

25

diff_prettyHtml() trong diff-match-patch thư viện từ Google.

+0

Liên kết tải xuống .zip bây giờ cho một ai đó 404 :( –

0

thử trước hết sạch cả hai HTML bởi lxml.html, và kiểm tra sự khác biệt bởi difflib

16

Nói chung, nếu bạn muốn một số HTML hiển thị theo cách đẹp hơn, bạn làm điều đó bằng cách thêm CSS.

Ví dụ, nếu bạn tạo ra mã HTML như thế này:

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) 

sau đó bạn sẽ có được nền màu xanh lá cây trên đường gia tăng, màu vàng trên đường thay đổi và đỏ trên bị xóa. Nếu tôi làm điều này, tôi sẽ lấy HTML được tạo ra, trích xuất phần thân và thêm tiền tố vào đó bằng khối HTML viết tay của riêng tôi với nhiều CSS để làm cho nó trông đẹp mắt. Tôi cũng có thể loại bỏ bảng huyền thoại và di chuyển nó lên trên cùng hoặc đặt nó trong một div để CSS có thể làm điều đó.

Thực ra, tôi sẽ cân nhắc nghiêm túc để chỉ sửa mô-đun difflib (được viết bằng python) để tạo HTML tốt hơn và đóng góp lại cho dự án. Nếu bạn có chuyên gia CSS để giúp bạn hoặc là chính bạn, hãy cân nhắc thực hiện việc này.

+1

thực hiện đề xuất của bạn (như tôi thường thấy là trường hợp với Python). HtmlDiff có phương pháp make_table() mà chỉ tạo ra các bảng HTML. Vì vậy, người dùng có thể thêm riêng CSS để làm cho nó tốt hơn so với câu trả lời được chấp nhận, điều này được bao gồm (từ py 2.4). –

1

Bản sao câu trả lời của riêng tôi từ here.


gì về DaisyDiff (JavaPHP vesions sẵn).

tính năng Sau đây là thật sự tốt đẹp:

  • trình với HTML nặng hình thành có thể được tìm thấy "trong tự nhiên".
  • Sự khác biệt là chuyên biệt hơn về HTML so với các khác biệt về cây XML. Thay đổi một phần của một nút văn bản sẽ không làm thay đổi toàn bộ nút.
  • Ngoài sự khác biệt về hình ảnh mặc định, nguồn HTML có thể được phân biệt rõ ràng.
  • Cung cấp mô tả dễ hiểu về các thay đổi.
  • GUI mặc định cho phép dễ dàng duyệt các sửa đổi thông qua các phím tắt và liên kết.
2

Gần đây, tôi đã đăng một tập lệnh python chỉ thực hiện việc này: diff2HtmlCompare (theo liên kết cho ảnh chụp màn hình). Dưới mui xe nó kết thúc tốt đẹp difflib và sử dụng pygments để làm nổi bật cú pháp.

0

Kể từ khi ..thư viện từ vỉa google không có phát triển tích cực nữa, tôi đề nghị sử dụng diff_py

Từ trang github:

Các công cụ diff đơn giản được viết bằng Python. Kết quả khác có thể được in trong bảng điều khiển hoặc tệp html.