Pergunta

Eu tenho usado o python difflib Biblioteca para descobrir onde 2 documentos diferem. O método diferente (). Compare () faz isso, mas é muito lento - pelo menos 100x mais lento para grandes documentos HTML em comparação com o diff comando.

Como posso determinar com eficiência onde 2 documentos diferem no Python? (Idealmente, estou atrás das posições, em vez do texto real, que é o que sequenceMatcher (). Get_opcodes () retorna.)

Foi útil?

Solução

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

Outras dicas

O Google tem um Biblioteca Diff Para texto simples com uma API Python, que deve se aplicar aos documentos HTML com os quais deseja trabalhar. Não tenho certeza se é adequado para o seu caso de uso específico, onde você está interessado especificamente na localização das diferenças, mas vale a pena dar uma olhada.

Uma solução feia e estúpida: se diff é mais rápido, use -o; através de uma chamada de Python via subprocess, analise a saída de comando para as informações necessárias. Isso não será tão rápido quanto apenas diff, mas talvez mais rápido que difflib.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top