2015-06-18 2 views
0

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

Это мой код

#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) 

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

+0

используйте менеджер контекста при работе с файлами. 'with open ('diff1') как:' ... –

+0

Вы просто хотите, чтобы новый список записывался после того, как вы сравнили два файла и удалили элементы, которые были дублированы из 'File one'? –

+0

Возможно, вам проще использовать 'filecmp' из стандартной библиотеки https://docs.python.org/2/library/filecmp.html – cdarke

ответ

1

Что вы делаете неправильно это -

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

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

Вам необходимо изменить код, чтобы вы вызывали только set(a) и `set (b). Что-то вдоль линий -

#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() 
0

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

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^