Pregunta

Estoy tratando de comparar dos archivos de texto y de salida de la primera cadena en el archivo de comparación que no coincide, pero estoy teniendo dificultades ya que soy muy nuevo en Python. ¿Puede alguien por favor, dame un modo de ejemplo para utilizar este módulo.

Cuando intento algo como:

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

Me aparece un error diciendo objeto de 'archivo' de tipo no tiene len.

¿Fue útil?

Solución

Para empezar, es necesario pasar cadenas a difflib.SequenceMatcher, no archivos:

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

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

Esto va a corregir su error de todos modos. Para obtener la primera cadena no coincidente, te voy a dirigir al maravilloso mundo de difflib documentación.

Otros consejos

Aquí está un ejemplo rápido de comparar el contenido de dos archivos usando Python difflib ...

import difflib

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

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

¿Está seguro existen dos archivos?

Sólo se probó y me da un resultado perfecto.

Para obtener los resultados que yo uso algo como:

import difflib

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

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

el primer carácter de cada línea indica si son diferentes: por ejemplo .: '+' significa la siguiente línea se ha añadido, etc.

Parece que puede que no necesite difflib en absoluto. Si usted está comparando línea por línea, intentar algo como esto:

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!"

Otro método más sencillo para comprobar si dos archivos de texto son los mismos línea por línea. Probarlo.

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()

de lo contrario, hay un archivo predefinido en Python en filecmp que se puede utilizar.

import filecmp

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

print(filecmp.cmp(fname1, fname2))

:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top