Quiero descubrir las diferencias de 2 (o 3 archivos si es posible) línea por línea. Las utilidades diferenciales pueden hacer esto, sin embargo, dan resultados inexactos. Porque 2 archivos tienen el número exacto de líneas, que es "134". Pero diff me da "Líneas agregadas" y "Líneas eliminadas". Sin embargo, esto es incorrecto, tienen exactamente el mismo número de líneas, no se agregan ni se eliminan líneas.
Los archivos de texto en los que quiero encontrar diferencias solo tienen números escritos, tal vez por eso falla el algoritmo. No pude encontrar ninguna opción para evitar eso, sin embargo, puedo estar equivocado, quiero decir que debería haber una opción para eso, pero nuevamente, no pude encontrarla.
Esto es lo que obtengo (5am.txt vs 6am.txt, hay un gran problema):
Esto es lo que quiero (6am.txt vs 7am.txt, todavía tiene problemas):
Editar:
Después de darme cuenta de que no tenía sentido hacer esto, me las arreglé solo. Casi hice lo mismo que hizo RedGrittyBrick. Este script imita la utilidad diff, por lo que yo (o usted) podemos usarlo con diff2html.
Para usarlo con diff2html, simplemente cambie de línea
diff_stdout = os.popen("diff %s" % string.join(argv[1:]), "r")
a
diff_stdout = os.popen("script.py %s" % string.join(argv[1:]), "r")
y nombra este script como quieras (necesitaPitón 2.xpara ejecutar, como diff2html):
import sys
f1=open(sys.argv[1],"r")
f1_read=f1.readlines()
f1.close()
f2=open(sys.argv[2],"r")
f2_read=f2.readlines()
f2.close()
changed={}
first_c = ""
for n in range(len(f1_read)):
if f1_read[n]!=f2_read[n]:
if first_c == "":
first_c=n+1
changed[first_c]=n+1
else:
first_c=""
#Let's imitate diff-utils...
for (x, y) in changed.items():
print "%d,%dc%d,%d" % (x,y,x,y)
for i in range(x,y+1):
sys.stdout.write("< %s" % f1_read[i-1])
print "---"
for i in range(x,y+1):
sys.stdout.write("> %s" % f2_read[i-1])
Resultados finales:
Respuesta1
diff supone que el segundo archivo puede haber sido creado no solo editando líneas sino también insertando y eliminando líneas.
Si solo desea saber qué líneas difieren sin considerar las líneas insertadas o eliminadas, puede utilizar un enfoque más simple.
$perl d.pl a b | less
1: 255, 107 DIFFERENT!
2: 197, 148 DIFFERENT!
3: 113, 165 DIFFERENT!
4: 0, 221 DIFFERENT!
5: 0, 153 DIFFERENT!
6: 0, 85 DIFFERENT!
7: 48, 255 DIFFERENT!
8: 61, 187 DIFFERENT!
9: 63, 85 DIFFERENT!
10: 3, 0 DIFFERENT!
11: 49, 0 DIFFERENT!
12: 58, 15 DIFFERENT!
13: 47, 0 DIFFERENT!
14: 62, 0 DIFFERENT!
15: 61, 0 DIFFERENT!
16: 255, 255 same
17: 255, 255 same
18: 255, 255 same
19: 255, 255 same
20: 255, 255 same
21: 255, 255 same
donde está d.pl
#!/usr/bin/perl
use strict;
use warnings;
open my $f1, '<', $ARGV[0] or die "Can't read '$ARGV[0]' - $!\n";
open my $f2, '<', $ARGV[1] or die "Can't read '$ARGV[1]' - $!\n";
while (my $f1_line = <$f1>) {
my $f2_line = <$f2>;
chomp for $f1_line, $f2_line;
my $verdict = $f1_line eq $f2_line ? 'same' : "DIFFERENT!";
printf "%3d: %5d, %5d %s\n", $., $f1_line, $f2_line, $verdict;
}
close $f2;
close $f1;
Respuesta2
Para comparar archivos uno al lado del otro, mi herramienta favorita esBloc de notas++.
Después de instalarlo, en la barra de herramientas, haga clic en Complementos>Administrador de complementos>Disponible y marque Comparar e instalar.
Después de reiniciar Notepad++, abra los dos archivos (se abrirán en pestañas diferentes) y en la barra de herramientas vaya a Complementos>Comparar>Comparar.
Hay varios ajustes que puedes hacer, pero comparar archivos se parece a esto:
donde el texto blanco no cambia, el rojo se elimina, se agrega verde y la barra lateral muestra una descripción general de esos cambios en los dos archivos.