![](/img/trans.png)
[英]How to compare two html files and show only the differences in a new html file using python
[英]How to compare two HTML files in python and print only the differences?
我有两个从声纳生成的 html 报告,显示了我的代码中的问题。
问题陈述:我需要比较两个声纳报告并找出差异,即引入的新问题。 基本上需要找到 html 中的差异并仅打印这些差异。
我尝试了几件事-
import difflib
file1 = open('sonarlint-report.html', 'r').readlines()
file2 = open('sonarlint-report_latest.html', 'r').readlines()
htmlDiffer = difflib.HtmlDiff()
htmldiffs = htmlDiffer.make_file(file1, file2)
with open('comparison.html', 'w') as outfile:
outfile.write(htmldiffs)
现在这给了我一个比较.html,它只是两个 html 差异。 不只打印不同的行。
我应该尝试 HTML 解析,然后以某种方式将差异打印出来吗? 请建议。
如果你使用difflib.Differ
,你可以只保留不同的行,并通过在每一行上写的两个字母代码进行过滤。 从 文档:
类 difflib.Differ
这是一个用于比较文本行序列并产生人类可读差异或增量的类。 Differ 使用 SequenceMatcher 来比较行序列,以及比较相似(接近匹配)行内的字符序列。
Differ delta 的每一行都以两个字母的代码开头:
代码含义
'-' 序列 1 独有的行
序列 2 独有的“+”行
' ' 两个序列共有的行
'? ' 行不存在于任一输入序列中
以“?”开头的行试图将眼睛引导到线内差异,并且在任一输入序列中都不存在。 如果序列包含制表符,这些行可能会令人困惑
通过保持以 '- ' 和 '+ ' 开头的行只是差异。
我将首先尝试逐行遍历每个 html 文件并检查这些行是否相同。
with open('file1.html') as file1, open('file2.html') as file2:
for file1Line, file2Line in zip(file1, file2):
if file1Line != file2Line:
print(file1Line.strip('\n'))
print(file2Line.strip('\n'))
您必须连续处理换行符和多行差异,但这可能是一个好的开始:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.