比较文件中的数据

时间:2018-09-04 06:56:24

标签: python python-3.x diff

下面的代码比较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')

1 个答案:

答案 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)

然后您的代码将起作用。