python difflib

Comparando dos archivos.txt usando difflib en Python



(4)

Estoy intentando comparar dos archivos de texto y generar la primera cadena en el archivo de comparación que no coincide, pero tengo dificultades ya que soy muy nuevo en Python. ¿Alguien puede darme una forma de ejemplo de usar este módulo?

Cuando intento algo como:

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

Recibo un error que dice que el objeto de tipo ''archivo'' no tiene len.


¿Estás seguro de que ambos archivos existen?

Acabo de probarlo y obtengo un resultado perfecto.

Para obtener los resultados utilizo 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 que se ha agregado la siguiente línea, etc.


Este es un ejemplo rápido de la comparación de los contenidos de dos archivos usando el difflib de Python ...

import difflib file1 = "myFile1.txt" file2 = "myFile2.txt" diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines()) print ''''.join(diff),


Para empezar, necesita 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())

Eso arreglará tu error de todos modos. Para obtener la primera cadena que no coincide, lo dirigiré al maravilloso mundo de la documentación difflib.


Parece que es posible que no necesite difflib en absoluto. Si está comparando línea por línea, intente 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!"