Как сравнить два текстовых файла в Python?

Опубликовано: 14 Декабря, 2021

Python предоставил методы для очень лаконичного управления файлами. В этой статье мы собираемся обсудить одно из приложений функций обработки файлов Python, то есть сравнение файлов.

Используемые файлы:

  • Текстовый файл 1
  • Текстовый файл 2

Метод 1: одновременное сравнение всего файла

Python поддерживает модуль filecmp с методом filecmp.cmp (), который возвращает три списка, содержащих совпадающие файлы, несовпадающие файлы и ошибки, касающиеся тех файлов, которые нельзя было сравнить. Этот метод может работать в двух режимах:

  • неглубокий режим: сравниваются только метаданные файлов, такие как размер, дата изменения и т. д.
  • глубокий режим: сравнивается содержимое файлов.

Syntax:

cmp(a, b)

Parameters:

a and b are the two numbers in which the comparison is being done. 

Returns:

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

Программа:

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)

Выход:

False

False



Метод 2: сравнение файлов построчно

Недостатком описанного выше подхода является то, что мы не можем получить строки, в которых файлы различаются. Хотя это необязательное требование, мы часто хотим следить за строками, в которых файлы различаются, а затем манипулировать этим в наших интересах. Основной подход к реализации этого - хранить каждую строку каждого файла в отдельных списках, по одному для каждого файла. Эти списки сравниваются друг с другом по два файла за раз.

Подход:

  • Откройте файлы для сравнения
  • Просмотрите файлы и сравните каждую строку двух файлов.
  • Если строки идентичны, выведите ТАКЖЕ на экране вывода.
  • В противном случае выведите разные строки из обоих файлов на экран вывода.

Программа:

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 ( " File 1:" , line1, end = '')
print ( " File 2:" , line2, end = '')
break
# closing files
f1.close()
f2.close()

Выход:

Метод 3: сравнение всего каталога

Python поддерживает модуль filecmp с методом filecmp.cmpfiles (), который возвращает три списка, содержащих совпавшие файлы, несовпадающие файлы и ошибки, касающиеся тех файлов, которые нельзя было сравнить. Он похож на первый подход, но используется для сравнения файлов в двух разных каталогах.

Программа:

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)

Выход:

Shallow Comparison

Match: [ ]

Mismatch: [ ‘ intro.txt ‘]

Errors: [ ]

Deep comparison

Match: []

Mismatch: [ ‘ intro.txt ‘]

Errors: [ ]

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.