Нахождение разницы не работает

Я пытаюсь найти разницу из двух файлов, но все же я получаю ответ из двух файлов

Это мой код

#File one(This file contents should be removed after comparing file two)
a = open('diff1','r+')
#File two
#This file has 999999 records
b = open('gtin','r+')
f8 = open('missing-test-remove.txt','w')
def diff(a, b):
    c = set(a).union(set(b))
    d = set(a).intersection(set(b))
    result =  list(c - d)
    for s in result:
        print s
        f8.write(s)

diff(a,b)

Но все же я получаю одинаковые результаты из двух файлов, но содержимое файла 1 следует удалить после сравнения с файлом 2

2 ответа

Решение

То, что вы делаете неправильно, -

c = set(a).union(set(b))
d = set(a).intersection(set(b))

пожалуйста, обратите внимание a а также b все еще остаются файловые дескрипторы, как только вы это сделаете set(a) если вы делаете set(a) опять же, вы получите пустой набор, потому что при первом вызове set(a), весь файл уже прочитан, а курсор для файла находится в конце.

Вам нужно изменить свой код так, чтобы вы звонили только set(a) и `установить (б) один раз. Нечто подобное

#File one(This file contents should be removed after comparing file two)
a = open('diff1','r+')
#File two
#This file has 999999 records
b = open('gtin','r+')
f8 = open('missing-test-remove.txt','w')
def diff(a, b):
    sa = set(a)
    sb = set(b)
    c = sa.union(sb)
    d = sa.intersection(sb)
    result =  list(c - d)
    for s in result:
        print s
        f8.write(s)

diff(a,b)

Кроме того, вы должны сбросить файл, в который вы пишете, после завершения записи и в конце закрыть все файлы как -

a.close()
b.close()
f8.close()

Вам необходимо сохранить установленное значение. Простой тест:

    print a
    print set(a)
    print a
    print set(a) # wrong

Так

    seta = set(a)
    setb = set(b)
    setc = seta.union(setb)
    setd = seta.intersection(setb)
Другие вопросы по тегам