下面的代码是比较2个文件并输出差异,如果有任何第三个文件。如果两个文件没有差异,则会将“ALL GOOD”字样输出到第3个文件中。我遇到的问题是,当两个文件都有差异时,它仍然包含“ALL GOOD”字样以及差异,而我只想输出第3个文件中的差异,只输出“ALL GOOD”时没有区别。
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')
我相信问题是你使用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)
那么你的代码就可以了。