¿Cómo comparar dos archivos de texto en python?

Python también ha proporcionado los métodos para manipular archivos de una manera muy concisa. En este artículo vamos a discutir una de las aplicaciones de las funciones de manejo de archivos de Python, es decir, la comparación de archivos.

Archivos en uso:

Método 1: Comparar el archivo completo a la vez

Python admite un módulo llamado filecmp con un método filecmp.cmp() que devuelve tres listas que contienen archivos coincidentes, archivos no coincidentes y errores con respecto a esos archivos que no se pudieron comparar. Este método puede operar en dos modos:

  • modo superficial: donde solo se comparan los metadatos de los archivos, como el tamaño, la fecha de modificación, etc.
  • modo profundo: donde se compara el contenido de los archivos.

Sintaxis:

cmp(a, b)

Parámetros:

a y b son los dos números en los que se está haciendo la comparación. 

Devoluciones:

  • -1 si a<b
  • 0 si a=b
  • 1 si a > b

Programa:

Python3

import filecmp
  
f1 = "C:/Users/user/Documents/intro.txt"
f2 = "C:/Users/user/Desktop/intro1.txt"
  
# shallow comparison
result = filecmp.cmp(f1, f2)
print(result)
# deep comparison
result = filecmp.cmp(f1, f2, shallow=False)
print(result)

Producción:

Falso

Falso

Método 2: Comparar archivos línea por línea

El inconveniente del enfoque anterior es que no podemos recuperar las líneas en las que difieren los archivos. Aunque este es un requisito opcional, a menudo queremos tener cuidado con las líneas en las que los archivos difieren y luego manipularlas para nuestro beneficio. El enfoque básico para implementar esto es almacenar cada línea de cada archivo en listas separadas, una para cada archivo. Estas listas se comparan entre sí dos archivos a la vez.

Acercarse:  

  • Abre los archivos a comparar.
  • Recorra los archivos y compare cada línea de los dos archivos.
  • Si las líneas son idénticas, envíe MISMO en la pantalla de salida.
  • De lo contrario, genere las líneas diferentes de ambos archivos en la pantalla de salida.

Programa:

Python3

# reading files
f1 = open("C:/Users/user/Documents/intro.txt", "r")  
f2 = open("C:/Users/user/Desktop/intro1.txt", "r")  
  
i = 0
  
for line1 in f1:
    i += 1
      
    for line2 in f2:
          
        # matching line1 from both files
        if line1 == line2:  
            # print IDENTICAL if similar
            print("Line ", i, ": IDENTICAL")       
        else:
            print("Line ", i, ":")
            # else print that line from both files
            print("\tFile 1:", line1, end='')
            print("\tFile 2:", line2, end='')
        break
  
# closing files
f1.close()                                       
f2.close()                                      

Producción: 

Método 3: Comparando el directorio completo

Python admite un módulo llamado filecmp con un método filecmp.cmpfiles() que devuelve tres listas que contienen archivos coincidentes, archivos no coincidentes y errores con respecto a esos archivos que no se pudieron comparar. Es similar al primer enfoque pero se usa para comparar archivos en dos directorios diferentes. 

Programa:

Python3

import filecmp
  
d1 = "C:/Users/user/Documents/"
d2 = "C:/Users/user/Desktop/"
files = ['intro.txt']
  
# shallow comparison
match, mismatch, errors = filecmp.cmpfiles(d1, d2, files)
print('Shallow comparison')
print("Match:", match)
print("Mismatch:", mismatch)
print("Errors:", errors)
  
# deep comparison
match, mismatch, errors = filecmp.cmpfiles(d1, d2, files, shallow=False)
print('Deep comparison')
print("Match:", match)
print("Mismatch:", mismatch)
print("Errors:", errors)

Producción:

Comparación superficial

Juego: [ ]

Discrepancia: [ ‘ intro.txt ‘]

Errores: [ ]

Comparación profunda

Juego: []

Discrepancia: [ ‘ intro.txt ‘]

Errores: [ ]

Publicación traducida automáticamente

Artículo escrito por harshdhussa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *