我有两个从声纳生成的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)
现在,这给了我一个compare.html,它不过是两个html diff。不只打印不同的行。
我应该尝试HTML解析,然后以某种方式获取仅要打印的差异吗?请提出建议。
答案 0 :(得分:0)
我将首先尝试逐行遍历每个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'))
您必须连续处理换行符和多个行差异,但这可能是一个不错的开始:)
答案 1 :(得分:0)
如果使用difflib.Differ
,则可以仅保留差异行,并通过过滤每行上写入的两个字母代码进行过滤。来自docs:
difflib.Differ类
这是用于比较行序列的类 文字,并产生易于理解的差异或差异。不同 使用SequenceMatcher比较行的序列,并 比较相似(接近匹配)行中的字符序列。
Differ delta的每一行都以两个字母的代码开头:
代码含义
'-'序列1唯一的行
'+'行对序列2唯一
''这两个序列共有的行
'? '在任何一个输入序列中都不存在
以“?”开头的线条试图引导眼睛进入线条内 差异,并且在任何一个输入序列中都不存在。这些 如果序列包含制表符,则行可能会造成混淆
通过以'-'和'+'开头的行只是区别。