Compara dos archivos línea por línea en Python

En Python, hay muchos métodos disponibles para esta comparación. En este artículo, descubriremos cómo comparar dos archivos diferentes línea por línea. Python admite muchos módulos para hacerlo y aquí discutiremos los enfoques que utilizan sus diversos módulos.

Este artículo utiliza dos archivos de ejemplo para la implementación.

Archivos en uso:

compare fil python

compare fil python

Método 1: Usar unified_diff()

Python tiene un módulo que se usa especialmente para comparar las diferencias entre los archivos. Para obtener diferencias usando la biblioteca difflib , tenemos que llamar a la función unified_diff() para esta comparación.  

Sintaxis:

unified_diff(file1, file2, fromfile, tofile, lineterm)

Parámetro:

  • file1: Lista de strings como file_1_text
  • file2: Lista de strings como file_2_text
  • fromfile: primer nombre de archivo con extensión
  • tofile: segundo nombre de archivo con extensión
  • lineterm: argumento para «» para que la salida sea automática y uniformemente libre de nueva línea

Acercarse

  • Módulo de importación
  • Abrir archivos
  • Compare usando unified_diff() con los atributos apropiados

Ejemplo:

Python3

# Importing difflib
import difflib
  
with open('file1.txt') as file_1:
    file_1_text = file_1.readlines()
  
with open('file2.txt') as file_2:
    file_2_text = file_2.readlines()
  
# Find and print the diff:
for line in difflib.unified_diff(
        file_1_text, file_2_text, fromfile='file1.txt', 
        tofile='file2.txt', lineterm=''):
    print(line)

Producción:

— archivo1.txt

+++ archivo2.txt

@@ -1,5 +1,5 @@

 Aprendizaje

 Python

 es

-también

-simple.

+entonces

+fácil

Método 2: Usar diferencias

Hay una clase disponible para comparar las diferencias entre los archivos denominados Differ dentro de la biblioteca difflib . Esta clase se utiliza para comparar secuencias de líneas de texto y producir diferencias o deltas legibles por humanos.

Código Sentido

‘-‘

línea única para la secuencia 1

‘+’

línea única para la secuencia 2

‘ ‘

línea común a ambas secuencias

‘?’

la línea no está presente en ninguna secuencia de entrada

Acercarse

  • Módulo de importación
  • Abrir archivos
  • Leer línea de contenido línea bt
  • Llame a la función de comparación con el uso de un objeto de clase diferente

Ejemplo:

Python3

from difflib import Differ
  
with open('file1.txt') as file_1, open('file2.txt') as file_2:
    differ = Differ()
  
    for line in differ.compare(file_1.readlines(), file_2.readlines()):
        print(line)

Producción:

Aprendizaje

Python

es

– también

– simple.

+ entonces

+ fácil.

Método 3: Uso del bucle while y el método de intersección

Acercarse

  • Abre ambos archivos en modo lectura.
  • Almacenar lista de strings
  • Comience a comparar ambos archivos con la ayuda del método de intersection() para strings comunes
  • Compare ambos archivos en busca de diferencias usando while loop
  • Cierra ambos archivos

Ejemplo:

Python3

# Open File in Read Mode
file_1 = open('file1.txt', 'r')
file_2 = open('file2.txt', 'r')
  
print("Comparing files ", " @ " + 'file1.txt', " # " + 'file2.txt', sep='\n')
  
file_1_line = file_1.readline()
file_2_line = file_2.readline()
  
# Use as a COunter
line_no = 1
  
print()
  
with open('file1.txt') as file1:
    with open('file2.txt') as file2:
        same = set(file1).intersection(file2)
  
print("Common Lines in Both Files")
  
for line in same:
    print(line, end='')
  
print('\n')
print("Difference Lines in Both Files")
while file_1_line != '' or file_2_line != '':
  
    # Removing whitespaces
    file_1_line = file_1_line.rstrip()
    file_2_line = file_2_line.rstrip()
  
    # Compare the lines from both file
    if file_1_line != file_2_line:
        
        # otherwise output the line on file1 and use @ sign
        if file_1_line == '':
            print("@", "Line-%d" % line_no, file_1_line)
        else:
            print("@-", "Line-%d" % line_no, file_1_line)
              
        # otherwise output the line on file2 and use # sign
        if file_2_line == '':
            print("#", "Line-%d" % line_no, file_2_line)
        else:
            print("#+", "Line-%d" % line_no, file_2_line)
  
        # Print a empty line
        print()
  
    # Read the next line from the file
    file_1_line = file_1.readline()
    file_2_line = file_2.readline()
  
    line_no += 1
  
file_1.close()
file_2.close()

Producción:

Comparando archivos 

 @ archivo1.txt

 # archivo2.txt

Líneas comunes en ambos archivos

Aprendizaje

Python

es

Líneas de diferencia en ambos archivos

@- Línea-4 también

#+ Línea-4 entonces

@- Línea-5 simple.

#+ Línea-5 fácil.

Publicación traducida automáticamente

Artículo escrito por shubhanshuarya007 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 *