蟒蛇。比较两个文本文档的内容

时间:2015-01-14 03:36:22

标签: python

我正在尝试将两个文本文档与python进行比较,只是通过返回一个真/假答案来说明文本文档的内容是否相同。

filehandle1=open(filename1,"r")
filehandle2=open(filename2,"r")
for line1 in filehandle1:
    for line2 in filehandle2:
        if line1==line2:
            print (True)
        else:
            print (False)

我对Python很陌生,对此并不了解。我想知道是否有人知道只是比较两个文本文档的简单方法。

我正在使用的文件包含:

文本1:

123456789

12345678
1234567

123456
12345

1234
123

12

文本2:

12

123
1234

12345
123456

1234567
12345678

123456789

文本3:

123456789

12345678
1234567

123456
12345

1234
123

12

我很感激一些帮助。

感谢。

4 个答案:

答案 0 :(得分:3)

您可以使用Filecmp模块:

 filecmp.cmp(f1, f2[, shallow])

  returns True is two file are identical else false

答案 1 :(得分:1)

@Hackaholic的回答(使用filecmp)可能是最好的。但是,如果您确实希望按行进行比较,那么最好的方法可能是:

def EqualContent(filename1, filename2):
    with open(filename1) as f1, open(filename2) as f2:
        return all(s1==s2 for s1, s2 in zip(f1, f2))

(在Python 2中,import future_builtins以确保内置函数在Python 3中工作!)。

这不需要足够的内存来同时将两个文件保存在内存中(例如基于readreadlines的方法),每次只有一行;并且,如果文件确实不同,则最小化所需的I / O量;这是因为all被设计为“快速失败” - return False一旦找到两条不同的行(它确实需要在return True之前结束,当然)。

在Python 2中,没有import future_builtinszip实际上会读取两个文件中的所有行,从而使优势无效(Python 3更智能 - 你可以使Python 2.7同样聪明那个import! - )。

答案 2 :(得分:0)

如果您只想比较两个文件是否包含相同的文本,您可以将它们作为一个整体进行比较,而不是逐行比较:

filehandle1.read() == filehandle2.read()

打开后也不要忘记关闭文件。

答案 3 :(得分:0)

with open("filename1.txt") as f:
    with open ("filename2.txt") as d:
        for x,y in zip (f,d):
            if x==y:
                print (True)
            else:
                print (False)

这是一种更好的方法。 zip用于相同的匹配方式。