Python:比较两个文件

Python:比较两个文件,python,Python,我有两个输入文件: 斯堪的纳维亚t航空公司 一个n 0航班号 六个n 0航班号 两个n 0航班号 三个n 0航班号 speedbird t航空公司 一个n 0航班号 六个n 0航班号 八个n 0航班号 我的第二个输入文件: 斯堪的纳维亚t航空公司 一个n 0航班号 六个n 0航班号 两个n 0航班号 三个n 0航班号 六个n 0航班号 八个n 0航班号 我有以下代码: with open('output_ref.txt', 'r') as file1: with open('output_ref

我有两个输入文件:

斯堪的纳维亚t航空公司
一个n 0航班号
六个n 0航班号
两个n 0航班号
三个n 0航班号

speedbird t航空公司
一个n 0航班号
六个n 0航班号
八个n 0航班号

我的第二个输入文件:

斯堪的纳维亚t航空公司 一个n 0航班号
六个n 0航班号
两个n 0航班号
三个n 0航班号

六个n 0航班号
八个n 0航班号

我有以下代码:

with open('output_ref.txt', 'r') as file1:
with open('output_ref1.txt', 'r') as file2:
same = set(file1).difference(file2)
print same
print "\n"

same.discard('\n')

with open('some_output_file.txt', 'w') as FO:
for line in same:
    FO.write(line)
我得到的输出是:

斯堪的纳维亚t航空公司
speedbird t航空公司

但我的实际产出应该是:

 first = set(file1)
 second = set(file2)
 same = first.intersection(second)
斯堪的纳维亚t航空公司
speedbird t航空公司
一个n 0航班号


有人能帮我解决这个问题吗

首先,如果您要做的是从2个文件中获取公共线(“相同”变量名建议),那么您应该使用交集方法而不是差分方法。另外,这两种方法都要求将集合作为其参数,因此我将进行额外的步骤,并将第二个文件也转换为集合。因此,新的代码应该是:

 first = set(file1)
 second = set(file2)
 same = first.intersection(second)

编辑:

在我的帖子上读到一些评论,让我确信你实际上想要的不是片场上的差异,而是列表上的差异。我想这应该适合你:

difference = list(file1)
second = list(file2)
for line in second:
    try:
        first.remove(line)
    except ValueError,e:
        print e # alternately you could just pass here
$python compare.py
['scandinavian t airline\n','speedbird t airline\n','one n 0航班号\n']
$cat some_output_file.txt
斯堪的纳维亚t航空公司
speedbird t航空公司
一个n 0航班号

集合是唯一的。因此,在执行“set(file1)”之后,您只有一行“one n 0 flightnumber”。也许你更喜欢列表?Python有一个内置的difflib(作为旁白,因为它没有回答所问的问题)。不,这不是他的问题的解决方案。正如@cyrille pontvieux所说,它失败了,因为set消除了重复项,并且
两个set对象中都出现了一个n0 flightnumber
。speedbird t airline仅出现在第一个文件中。此外,如果他想要的不是普通的行,那么我猜将变量命名为“相同”是一个非常糟糕的想法。当然,我同意你的观点,命名
相同的
变量是令人困惑的,但是从他的预期输出和他的代码来看,我想他想得到不同的欢迎:-)我想知道为什么有人在被op接受后会投反对票。