下面的代码比较2个文件,如果有差异则输出到第3个文件中。 如果两个文件都没有差异,它将在第三个文件中输出单词“ ALL GOOD”。 我遇到的问题是两个文件中都有差异时,它仍然包含单词“ ALL GOOD”以及差异,而我只想在第三个文件中输出差异,而仅在第三个文件中输出“ 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')
答案 0 :(得分:0)
我认为问题在于您使用的是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)
然后您的代码将起作用。