确定文档与Python的不同之处

时间:2010-01-04 11:39:58

标签: python diff document difflib sequencematcher

我一直在使用Python difflib库来查找2个文档的不同之处。 Differ()。compare()方法执行此操作,但它非常慢 - 与diff命令相比,大型HTML文档至少慢100倍。

如何有效地确定Python中2个文档的不同之处? (理想情况下,我是在位置而不是实际文本,这是SequenceMatcher()。get_opcodes()返回的位置。)

3 个答案:

答案 0 :(得分:3)

a = open("file1.txt").readlines()
b = open("file2.txt").readlines()
count = 0
pos = 0

while 1:
    count += 1
    try:
        al = a.pop(0)
        bl = b.pop(0)
        if al != bl:
            print "files differ on line %d, byte %d" % (count,pos)
        pos += len(al)
    except IndexError:
        break

答案 1 :(得分:2)

Google对于带有python API的纯文本有一个diff library,它应该适用于您要使用的html文档。我不确定它是否适合您特定的用例,您对差异的位置特别感兴趣,但值得一看。

答案 2 :(得分:1)

一个丑陋而愚蠢的解决方案:如果diff更快,请使用它;通过python通过subprocess调用,解析命令输出以获取所需信息。这不会像diff那么快,但可能比difflib快。