2015-06-18 90 views
0

我想從兩個文件發現差別,但我依然從兩個文件尋找差異不工作

得到答案這是我的代碼

#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

請在處理文件時使用上下文管理。 ''open'('diff1')as:'... –

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

請注意ab仍然是文件描述符,一旦你做了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)