比较文件中的数据

问题描述 投票:0回答:1

下面的代码是比较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')
python python-3.x diff
1个回答
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)

那么你的代码就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.