如何在 Python 中逐行比较两个不同的文件?
本教程介绍了用于比较两个文件的各种 Python 比较技术。我们将介绍如何使用可用的模块、读取两个文件并逐行比较它们来执行此典型工作。
在 Python 中,比较两个文件可以通过多种方式完成。
逐行比较两个文本文件
使用 open() 函数读取两个文本文件中的数据,我们可以比较它们包含的信息。open() 函数将搜索本地目录并可能读取。
示例
在这个示例中,我们将对比两个包含 python 数据的文件。我们被告知这两个 python 文件可能不相同。Python 将为我们检查文件。可以使用 readlines() 方法从 python 文件中提取行。
file1 = open('D:\Work TP/moving files.py', 'r') file2 = open('D:\Work TP/mysql_access.py', 'r') File3 = open('D:\Work TP/trial.py', 'w') for line1 in file1: for line2 in file2: if line1 == line2: File3.write("%s\n" %(line1)) File3.close() file1.close() file2.close()
提取数据后,使用 for 循环逐行比较文件。如果行不匹配,则通过消息通知用户发生不匹配的位置。为了方便用户找到不同的行,我们将包含数据本身。
输出
以下是上述代码的输出 -
Line 1 doesn't match. ------------------------ File1: # importing the modules File2: import mysql.connector Line 2 doesn't match. ------------------------ File1: import os File2: sampleDB=mysql.connector.connect(host='localhost',user='root',password='password',database='textx') Line 3 doesn't match. ------------------------ File1: import shutil File2: #print (sampleDB.connection_id) Line 4 doesn't match. ------------------------ File1: # Providing the folder path File2: cur=sampleDB.cursor() Line 5 doesn't match. ------------------------ File1: origin = 'C:\Users\Lenovo\Downloads\Works\' File2: s="CREATE TABLE novel(novelid integer(4),name varchar(20),price float(5,2))" Line 6 doesn't match. ------------------------ File1: target = 'C:\Users\Lenovo\Downloads\Work TP\' File2: cur.execute(s)
使用 filecmp 模块
filecmp 模块使在 Python 中处理文件成为可能。此模块专门用于比较两个或多个文件之间的数据。我们可以使用 filecmp.cmp() 方法来实现这一点。如果文件匹配,此函数将返回 True;否则,将返回 False。
示例
以下是使用 filecmpule 的示例 −
import filecmp import os # notice the two backslashes File1 = "D:\Work TP\moving files.py" File2 = "D:\Work TP\trial.py" def compare_files(File1,File2): compare = filecmp.cmp(File1,File2) if compare == True: print("The two files are the same.") else: print("The two files are different.") compare_files(File1,File2)
输出
以下是上述代码的输出 -
The two files are different.
使用 difflib 模块
要比较文本并识别它们之间的差异,请使用 difflib 包。此 Python 3 模块已预先打包在语言中。它具有许多用于比较文本样本的有用功能。
首先,我们将使用 unified diff() 函数识别两个数据文件之间的差异。接下来,我们将比较这些文件。
示例 1 - 使用 unified-diff()
在下面的示例中,使用 with 语句读取文件数据。Python with 语句允许我们安全地打开和读取文件 -
import difflib with open("D:\Work TP/moving files.py",'r') as file1: file1_info = file1.readlines() with open("D:\Work TP/trial.py",'r') as file2: file2_info = file2.readlines() diff = difflib.unified_diff( file1_info, file2_info, fromfile="file1.py", tofile="file2.py", lineterm='') for lines in diff: print(lines)
输出
以下是上述代码的输出 -
--- file1.py +++ file2.py @@ -1,12 +0,0 @@ -# importing the modules -import os -import shutil -# Providing the folder path -origin = 'C:\Users\Lenovo\Downloads\Works\' -target = 'C:\Users\Lenovo\Downloads\Work TP\' -# Fetching the list of all the files -files = os.listdir(origin) -# Fetching all the files to directory -for file_name in files: - shutil.copy2(origin+file_name, target+file_name) -print("Files are copied succesfully")
示例 2 - 使用 differ()
在 difflib 库中,有一个名为 Differ 的类,可用于比较文件差异。此类用于比较文本行组并生成增量或差异。
以下是一个使用 differ() 方法逐行比较两个不同文件的示例 -
from difflib import Differ with open('D:\Work TP/moving files.py') as file1, open('D:\Work TP/trial.py') as file2: vary = Differ() for lines in vary.compare(file1.readlines(), file2.readlines()): print(lines)
输出
以下是上述代码的输出 -
- # importing the modules - import os - import shutil - # Providing the folder path - origin = 'C:\Users\Lenovo\Downloads\Works\' - target = 'C:\Users\Lenovo\Downloads\Work TP\' - # Fetching the list of all the files - files = os.listdir(origin) - # Fetching all the files to directory - for file_name in files: - shutil.copy2(origin+file_name, target+file_name) - print("Files are copied succesfully")