如何比较Python中的两个文本文件?
Python也提供了以非常简洁的方式操作文件的方法。在本文中,我们将讨论 Python 文件处理功能的应用之一,即文件比较。
使用中的文件:
- 文本文件 1
- 文本文件 2
方法一:一次比较完整的文件
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
- 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)
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()
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)
输出:
False
False
方法二:逐行比较文件
上述方法的缺点是我们无法检索文件不同的行。尽管这是一个可选要求,但我们经常希望注意文件不同的行,然后对其进行操作以达到我们的优势。实现这一点的基本方法是将每个文件的每一行存储在单独的列表中,每个文件一个。这些列表一次相互比较两个文件。
方法:
- 打开要比较的文件
- 循环遍历文件并比较两个文件的每一行。
- 如果行相同,则在输出屏幕上输出SAME 。
- 否则,从输出屏幕上的两个文件中输出不同的行。
程序:
蟒蛇3
# 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()
输出:
方法三:比较完整目录
Python支持名为 filecmp 的模块,其方法 filecmp.cmpfiles() 返回三个列表,其中包含匹配文件、不匹配文件和有关无法比较的文件的错误。它类似于第一种方法,但用于比较两个不同目录中的文件。
程序:
蟒蛇3
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: [ ]