Necesito comparar dos archivos y redirigir las diferentes líneas al tercer archivo. Sé que usando el comando diff puedo obtener la diferencia. Pero, ¿hay alguna forma de hacerlo en Python? Cualquier código de ejemplo será útil chequeComparación de dos archivos de texto en python
Respuesta
cabo difflib
Este módulo proporciona clases y funciones para la comparación de secuencias. Se se puede utilizar, por ejemplo, para comparar archivos, y puede producir diferencia información en varios formatos, incluyendo HTML y contexto y unificados diff [...]
Un ejemplo de línea de comandos en http://docs.python.org/library/difflib.html#difflib-interface
import sys
if len(sys.argv) !=3 :
print "usage:" + sys.argv[0] + " bla bla"
exit
elif len(sys.argv) == 3:
file1 = set((x for x in open(sys.argv[1])))
file2 = set((x for x in open(sys.argv[2])))
file3 = file2.difference(file1)
file4 = file1.difference(file2)
str1="file1-contains but file2 not \n"
str2="file2-contains but file1 not\n"
FILE = open('file3','w')
FILE.writelines(str2)
FILE.writelines(file3)
FILE.writelines(str1)
FILE.writelines(file4)
#compare 2 text files.
test1filehandle = open("test1.txt", "r") #creating a file handle
test2filehandle=open("test2.txt","r") #creating a file handle to read
test3filehandle=open("test3.txt","w") #creating a file handle to write
test1list= test1filehandle.readlines() #read the lines and store in the list
test2list=test2filehandle.readlines()
k=1
for i,j in zip(test1list,test2list): #zip is used to iterate the variablea in 2 lists simultaneoously
if i !=j:
test3filehandle.write("Line Number:" +str(k)+' ')
test3filehandle.write(i.rstrip("\n") + ' '+ j)
k=int(k)
k=k+1;
¿Por qué el voto a favor? Tal vez explicar tu código Rekha? –
La comparación de dos archivos de texto en Python?
Sure, difflib lo hace fácil.
vamos a configurar una demo:
f1path = 'file1'
f2path = 'file2'
text1 = '\n'.join(['a', 'b', 'c', 'd', ''])
text2 = '\n'.join(['a', 'ba', 'bb', 'c', 'def', ''])
for path, text in ((f1path, text1), (f2path, text2)):
with open(path, 'w') as f:
f.write(text)
Ahora para inspeccionar un diff. Las líneas que utilizan os
y time
se utiliza simplemente para proporcionar un sello de tiempo decente para la última vez que se modificaron sus archivos, y son completamente opcionales, y son argumentos opcionales a difflib.unified_diff
:
# optional imports:
import os
import time
# necessary import:
import difflib
Ahora sólo abrir los archivos, y pasar una lista de sus líneas (de f.readlines
) a difflib.unified_diff
, y unirse a la lista de salida con una cadena vacía, la impresión de los resultados:
with open(f1path, 'rU') as f1:
with open(f2path, 'rU') as f2:
readable_last_modified_time1 = time.ctime(os.path.getmtime(f1path)) # not required
readable_last_modified_time2 = time.ctime(os.path.getmtime(f2path)) # not required
print(''.join(difflib.unified_diff(
f1.readlines(), f2.readlines(), fromfile=f1path, tofile=f2path,
fromfiledate=readable_last_modified_time1, # not required
tofiledate=readable_last_modified_time2, # not required
)))
que imprime:
--- file1 Mon Jul 27 08:38:02 2015
+++ file2 Mon Jul 27 08:38:02 2015
@@ -1,4 +1,5 @@
a
-b
+ba
+bb
c
-d
+def
Nuevamente, puede eliminar todas las líneas que son declaradas opcionales/no obligatorias y obtener los mismos resultados sin la marca de tiempo.
redirigir las diferentes líneas a un tercer archivo
en lugar de imprimir, abrir un tercer archivo para escribir las líneas:
difftext = ''.join(difflib.unified_diff(
f1.readlines(), f2.readlines(), fromfile=f1path, tofile=f2path,
fromfiledate=readable_last_modified_time1, # not required
tofiledate=readable_last_modified_time2, # not required
))
with open('diffon1and2', 'w') as diff_file:
diff_file.write(difftext)
y:
$ cat diffon1and2
--- file1 Mon Jul 27 11:38:02 2015
+++ file2 Mon Jul 27 11:38:02 2015
@@ -1,4 +1,5 @@
a
-b
+ba
+bb
c
-d
+def
- 1. Python: Comparación de columnas específicas en dos archivos CSV
- 2. La comparación de dos generadores en Python
- 3. Leer dos archivos de texto línea por línea simultáneamente -python
- 4. Función de comparación que compara dos archivos de texto en Unix
- 5. Procesamiento de texto con dos archivos
- 6. Generar una diferencia "difusa" de dos archivos en Python, con una comparación aproximada de flotantes
- 7. Comparación de dos archivos xml en Objective-C
- 8. Comparación de dos matrices
- 9. diff dos archivos grandes en Python
- 10. Algoritmo de comparación de texto
- 11. Análisis de archivos de texto con Python
- 12. Comparando dos archivos .txt usando difflib en Python
- 13. comparar dos archivos de texto usando linq?
- 14. Combinar dos archivos de texto con powershell
- 15. diferencia porcentual entre dos archivos de texto
- 16. Uso de python para escribir archivos de texto con terminaciones de línea de DOS en Linux
- 17. Comparación de archivos enormes usando C++
- 18. Orden de comparación de texto Eclipse
- 19. Comparación de dos objetos NSManagedObjects
- 20. Comparación de la estructura de carpetas en dos entornos
- 21. componiendo dos funciones de comparación?
- 22. Comparación de dos esquemas XML
- 23. Comparación de dos objetos NSNumber
- 24. Python comparación de tiempo
- 25. Comparación de dos colecciones en Java
- 26. La comparación de dos Diccionarios en C#
- 27. NumPy: Comparación de elementos en dos matrices
- 28. la comparación de dos tablas en SQLite
- 29. Utilidad de comparación de archivos
- 30. ¿Cómo concateno dos archivos de texto en PowerShell?
Independientemente de si este código funciona, realmente no explica cómo hacer w que pregunta la pregunta – yoozer8