如何在python中比较两个HTML文件并仅打印差异?

时间:2018-08-20 09:56:18

标签: python html comparison

我有两个从声纳生成的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解析,然后以某种方式获取仅要打印的差异吗?请提出建议。

2 个答案:

答案 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唯一

     

''这两个序列共有的行

     

'? '在任何一个输入序列中都不存在

     

以“?”开头的线条试图引导眼睛进入线条内   差异,并且在任何一个输入序列中都不存在。这些   如果序列包含制表符,则行可能会造成混淆

通过以'-'和'+'开头的行只是区别。