Python 比较文件中的数据

Python 比较文件中的数据,python,python-3.x,diff,Python,Python 3.x,Diff,下面的代码比较两个文件,如果有差异,则将差异输出到第三个文件中。 如果两个文件没有差异,它会将单词“ALL GOOD”输出到第三个文件中。 我遇到的问题是,当两个文件都有差异时,它仍然包括单词“ALL GOOD”以及差异,而我只想在第三个文件中输出差异,并且仅在没有差异时输出“ALL GOOD” with open('master.txt','r') as masterfile: with open('file','r') as usedfile: difference

下面的代码比较两个文件,如果有差异,则将差异输出到第三个文件中。 如果两个文件没有差异,它会将单词“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')

我认为问题在于您使用的是
set().difference(t)
而不是
set().symmetric\u difference(t)

在python文档中,
set().difference(t)
被定义为返回一个
新集,其中元素在s中,但不在t中
,而
set().symmetric_difference(t)
返回一个
新集,其中元素在s或t中,但不在两者中

以这段代码为例:

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


然后你的代码就可以工作了。

你确定这正是你正在运行的代码吗。我不相信它会写差异和“所有好的”,除非“所有好的”是差异之一。嗨,Zvone,我已经测试了代码,当有差异时它仍然写“所有好的”。它在第三个txt文件中输出差异以及“一切正常”字样。不知道为什么,这就是我发布此问题的原因。您是否尝试在调试器中运行以查看发生了什么情况?感谢您查看,但是当文件中存在差异时,它仍然包含单词“ALL GOOD”,当它不应该出现时。这并没有回答所问的问题。它评论了一个不同的话题。注释部分应用于此目的。
difference = set(masterfile).symmetric_difference(usedfile)