Лучший способ проверить new-line-independent-identity 2 файла с помощью python
Я пытался
filecmp.cmp(file1,file2)
но он не работает, поскольку файлы идентичны, за исключением новых символов строки. Есть ли опция для этого в filecmp или какой-либо другой удобной функции / библиотеке или мне нужно читать оба файла по строкам и сравнивать их?
- Сортировка словаря python после запуска функции itertools
- Как работает Pythons SequenceMatcher?
- Python – Сравнить список списков и выбрать наибольшее значение
- два списка, более быстрое сравнение в python
- сравнение индекса списка в python
Я думаю, что простая удобная функция, подобная этой, должна выполнять эту работу:
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
чтобы он соответствовал вашим требованиям, например, вы можете игнорировать и дело.
- вложенный конструктор. Почему это требуется?
- Поддерживает ли Python-Requires OrderedDicts или что-то еще не так?
- PANDAS – объединение двух индексов datetime с разными размерами для сравнения дней и значений
- используя bisect в списке кортежей, но сравните, используя только первое значение
- Сравнение производительности в Python: равное и не равное
- Поиск несоответствий в кортежах и объединение их в Python
- Поиск определенных столбцов таблицы для несоответствующих элементов
- Сравнивая массивы NumPy так, чтобы NaN сравнивали равные
- Сравнение 2 списков списков (String и array)
- Сравнить список словарей с разницей в одном словаре
- Pandon Pandas Если значение в столбце B = равно , замените столбец A на «T»