我正在尝试将两个文本文档与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
我很感激一些帮助。
感谢。
答案 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中工作!)。
这不需要足够的内存来同时将两个文件保存在内存中(例如基于read
或readlines
的方法),每次只有一行;并且,如果文件确实不同,则最小化所需的I / O量;这是因为all
被设计为“快速失败” - return False
一旦找到两条不同的行(它确实需要在return True
之前结束,当然)。
在Python 2中,没有import future_builtins
,zip
实际上会读取两个文件中的所有行,从而使优势无效(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
用于相同的匹配方式。