📜  如何比较Python中的两个文本文件?

📅  最后修改于: 2022-05-13 01:55:37.902000             🧑  作者: Mango

如何比较Python中的两个文本文件?

Python也提供了以非常简洁的方式操作文件的方法。在本文中,我们将讨论 Python 文件处理功能的应用之一,即文件比较。

使用中的文件:

  • 文本文件 1
  • 文本文件 2

方法一:一次比较完整的文件

Python支持名为 filecmp 的模块,其方法 filecmp.cmp() 返回三个列表,其中包含匹配文件、不匹配文件和有关无法比较的文件的错误。此方法可以在两种模式下运行:

  • 浅模式:仅比较文件的元数据,如大小、修改日期等。
  • 深度模式:比较文件内容的地方。

程序:

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)


输出:

方法二:逐行比较文件

上述方法的缺点是我们无法检索文件不同的行。尽管这是一个可选要求,但我们经常希望注意文件不同的行,然后对其进行操作以达到我们的优势。实现这一点的基本方法是将每个文件的每一行存储在单独的列表中,每个文件一个。这些列表一次相互比较两个文件。

方法:

  • 打开要比较的文件
  • 循环遍历文件并比较两个文件的每一行。
  • 如果行相同,则在输出屏幕上输出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)

输出: