Сравнение файлов

353 просмотра
0
0 Комментариев

У меня есть 2 файла, один из них скачивается из сети и может отличаться от предыдущего. Мне нужно найти их различия, я попробовал, так:

a = newResource.readlines()
b = oldResource.readlines()
for lines in a:
    for lines2 in b:
        if lines == lines2:
            print lines + ' == ' + lines2;
            break;
        else:
            print lines + '!= ' + lines2;

Но у меня не вышло, потому, что каждый раз проверяется на одну строку больше из-за содержимого файла. Оно примерно такое.


Старый файл

  • Строка1
  • Строка2
  • Строка3

Новый файл

  • Строка1
  • Строка2
  • ЗаменилиСтроку3
  • ЕщеОднаСтрока4

И результат примерно такой:

  • Строка1 == Строка1
  • Строка2 != Строка1
  • Строка2 == Строка2
  • Строка3 != Строка1
  • и т.д.

Как можно сделать без проверки уже проверенных элементров которые удовлетворили условие? Так как, все строки в файлах будут отличаться друг от друга и не повторятся никогда.Может быть кто-то знает как найти различия? Или может есть какие то методы для удаления подстроки из строки? Или какие нибудь другие способы решения проблемы.


Добавить комментарий

1 Ответы

Python Опубликовано 16.12.2018
0

from itertools import izip_longest
 
# Превратим файлы в список строк, убрав символы \n в конце строки
l1 = map(lambda x: x.strip(), list(open('test1.txt')))
l2 = map(lambda x: x.strip(), list(open('test2.txt')))
 
# превратим два списка в один, где каждый елемент первого соответсвует елементу второго.
# Если в одном из спсиков нет соответсвующей строки - будет None
diff_list = izip_longest(l1, l2)
 
for diff in diff_list:
    print '%s %s %s' % (
        diff[0] or '',
        '==' if diff[0] == diff[1] else '!=',
        diff[1] or '',
    )

результат будет такой:

Строка1 == Строка1
Строка2 == Строка2
Строка3 != ЗаменилиСтроку3
 != ЕщеОднаСтрока4Строка1

еще в python есть модуль difflib для работы с различиями.
Например он может вывести вашу разницу в таком виде:

  Строка1
  Строка2
- Строка3
+ ЗаменилиСтроку3
+ ЕщеОднаСтрока4Строка1

с помощью такого кода:

from difflib import ndiff
 
t1 = open('test1.txt').read().splitlines(1)
t2 = open('test2.txt').read().splitlines(1)
 
print ''.join(ndiff(t1, t2))

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up