Лучший способ проверить new-line-independent-identity 2 файла с помощью python

Я пытался

filecmp.cmp(file1,file2) 

но он не работает, поскольку файлы идентичны, за исключением новых символов строки. Есть ли опция для этого в filecmp или какой-либо другой удобной функции / библиотеке или мне нужно читать оба файла по строкам и сравнивать их?

Я думаю, что простая удобная функция, подобная этой, должна выполнять эту работу:

 from itertools import izip def areFilesIdentical(filename1, filename2): with open(filename1, "rtU") as a: with open(filename2, "rtU") as b: # Note that "all" and "izip" are lazy # (will stop at the first line that's not identical) return all(myprint() and lineA == lineB for lineA, lineB in izip(a.xreadlines(), b.xreadlines())) 

Попробуйте модуль difflib – он предоставляет классы и функции для сравнения последовательностей.

Для ваших нужд класс difflib.Differ выглядит интересным.

class difflib.Differ

Это класс для сравнения последовательностей строк текста и создания различий или дельт. Differ использует SequenceMatcher как для сравнения последовательностей строк, так и для сравнения последовательностей символов в похожих (близких) линиях.

См. Другой пример , который сравнивает два текста. Сравниваемые последовательности также могут быть получены из метода readlines() файловых объектов.

Похоже, вам просто нужно проверить, являются ли файлы одинаковыми или не игнорируют пробелы / новые строки.

Вы можете использовать такую ​​функцию

 def do_cmp(f1, f2): bufsize = 8*1024 fp1 = open(f1, 'rb') fp2 = open(f2, 'rb') while True: b1 = fp1.read(bufsize) b2 = fp2.read(bufsize) if not is_same(b1, b2): return False if not b1: return True def is_same(text1, text2): return text1.replace("\n","") == text2.replace("\n","") 

вы можете улучшить is_same чтобы он соответствовал вашим требованиям, например, вы можете игнорировать и дело.