使用(或在 Python 3 中itertools.ifilter
内置)filter
itertools.ifilter(predicate, iterable)
您的谓词应该是一个函数,返回False
您想要忽略的行。例如。
def predicate(line):
if 'something' in line:
return False # ignore it
return True
然后在您的文件对象上使用它。fin = ifilter(predicate, fin)
然后只需使用类似的东西
from itertools import izip, ifilter # on Python 3 instead use builtin zip and filter
f1 = ifilter(predicate, f1)
f2 = ifilter(predicate, f2)
all(x == y for x, y in izip(f1, f2))
difflib
除非您想查看差异是什么,否则您不需要,并且由于您已经尝试过filecmp
,我假设您只想知道是否存在差异。不幸的是,filecmp
仅适用于文件名。
也为了跳过每个文件的第一行,只需使用itertools.islice(fin, 1, None)
from itertools import islice, izip
def predicate(line):
''' you can add other general checks in here '''
if line.startswith('Date'):
return False # ignore it
return True
with open('File1.txt') as f1, open('File2.txt') as f2:
f1 = ifilter(predicate, f1)
f2 = ifilter(predicate, f2)
print(all(x == y for x, y in izip(f1, f2)))
>>> True