我有两个由声纳生成的 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)
现在这给了我一个 Comparison.html,它只不过是两个 html diff。不只打印不同的行。
我应该尝试 HTML 解析,然后以某种方式获取差异并打印出来吗?
如果您使用
difflib.Differ
,您可以仅保留差异行,并通过每行上写入的两个字母代码进行过滤。来自文档:
类 difflib.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'))
您必须处理换行符和连续的多行差异,但这可能是一个好的开始:)