Pergunta

Eu estou tentando comparar dois arquivos de texto e de saída da primeira corda no arquivo de comparação que não corresponde, mas estou tendo dificuldade desde que eu sou muito novo para python. Alguém pode por favor me dê um jeito de exemplo para usar este módulo.

Quando tento algo como:

result = difflib.SequenceMatcher(None, testFile, comparisonFile)

Eu recebo um erro dizendo objeto de 'arquivo' tipo não tem len.

Foi útil?

Solução

Para começar, você precisa passar strings para difflib.SequenceMatcher, não arquivos:

# Like so
difflib.SequenceMatcher(None, str1, str2)

# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())

Isso vai corrigir o seu erro de qualquer maneira. Para obter a primeira cadeia não-correspondência, vou encaminhá-lo para o maravilhoso mundo da difflib documentação.

Outras dicas

Aqui está um exemplo rápido de comparar o conteúdo de dois arquivos usando Python difflib ...

import difflib

file1 = "myFile1.txt"
file2 = "myFile2.txt"

diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines())
print ''.join(diff),

Você tem certeza existem dois arquivos?

Apenas testei e eu obter um resultado perfeito.

Para obter os resultados que eu uso algo como:

import difflib

diff=difflib.ndiff(open(testFile).readlines(), open(comparisonFile).readlines())

try:
    while 1:
        print diff.next(),
except:
    pass

o primeiro caractere de cada linha indica se eles são diferentes: ex .: '+' significa que o seguinte foi adicionado linha, etc.

Parece que você pode não precisar difflib em tudo. Se você está comparando linha por linha, tentar algo como isto:

test_lines = open("test.txt").readlines()
correct_lines = open("correct.txt").readlines()

for test, correct in zip(test_lines, correct_lines):
    if test != correct:
        print "Oh no! Expected %r; got %r." % (correct, test)
        break
else:
    len_diff = len(test_lines) - len(correct_lines)
    if len_diff > 0:
        print "Test file had too much data."
    elif len_diff < 0:
        print "Test file had too little data."
    else:
        print "Everything was correct!"

Outro método mais fácil para verificar se dois arquivos de texto são os mesmos linha por linha. Experimentá-lo.

fname1 = 'text1.txt'
fname2 = 'text2.txt'

f1 = open(fname1)
f2 = open(fname2)

lines1 = f1.readlines()
lines2 = f2.readlines()
i = 0
f1.seek(0)
f2.seek(0)
for line1 in f1:
    if lines1[i] != lines2[i]:
        print(lines1[i])
        exit(0)
    i = i+1

print("both are equal")

f1.close()
f2.close()

Caso contrário, há um arquivo predefinido em python em filecmp que você pode usar.

import filecmp

fname1 = 'text1.txt'
fname2 = 'text2.txt'

print(filecmp.cmp(fname1, fname2))

:)

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