Сравнение данных в файлах - PullRequest
0 голосов
/ 04 сентября 2018

Приведенный ниже код сравнивает 2 файла и выводит разницу, если она есть, в 3-й файл. Если в обоих файлах НЕТ различий, он выведет слово «ВСЕ ХОРОШО» в 3-й файл. Проблема, с которой я сталкиваюсь, заключается в том, что, когда есть разница в обоих файлах, она по-прежнему включает слова «ВСЕ ХОРОШО» вместе с различиями, тогда как я хочу выводить различия только в 3-м файле и выводить «ВСЕ ХОРОШО», когда разницы нет.

with open('master.txt','r') as masterfile:
    with open('file','r') as usedfile:
        difference = set(masterfile).difference(usedfile)

with open('text3.txt', 'w') as file_out:
    if difference:
        for line in difference:
            file_out.write(line)
    else:
        file_out.write('ALL GOOD')

1 Ответ

0 голосов
/ 04 сентября 2018

Я считаю, что проблема в том, что вы используете set().difference(t) вместо set().symmetric_difference(t)

Из документов Python set().difference(t) определяется как возвращающий new set with elements in s but not in t, тогда как set().symmetric_difference(t) возвращает new set with elements in either s or t but not both.

Возьмите этот код, например:

>>> s1 = [1,2,3,4,5]
>>> s2 = [1,2,3,4,5,6]
>>> set(s1).difference(s2)
set()
>>> set(s1).symmetric_difference(s2)
{6}

Как видите, set().difference(t) не возвращает разницу между двумя наборами, а, скорее, любые элементы в s1, которых нет в s2. Я верю, если вы замените линию

difference = set(masterfile).difference(usedfile)

с

difference = set(masterfile).symmetric_difference(usedfile)

тогда ваш код будет работать.

...