首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :比较两个文件

Python :比较两个文件
EN

Stack Overflow用户
提问于 2014-06-17 09:44:59
回答 2查看 244关注 0票数 0

我有两个输入文件:

斯堪的纳维亚航空公司

1n0飞行数

6n0飞行数

2n0飞行数

3n0飞行数

飞鸟航空公司

1n0飞行数

6n0飞行数

8n0飞行数

我的第二个输入文件:

斯堪的纳维亚航空公司

1n0飞行数

6n0飞行数

2n0飞行数

3n0飞行数

6n0飞行数

8n0飞行数

我有以下代码:

代码语言:javascript
复制
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)

我得到的输出是:

斯堪的纳维亚航空公司

飞鸟航空公司

但我的实际产出应该是:

斯堪的纳维亚航空公司

飞鸟航空公司

1n0飞行数

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-17 10:24:37

代码语言:javascript
复制
def diff(a, b):
    y = []
    for x in a:
        if x not in b:
            y.append(x)
        else:
            b.remove(x)
    return y

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

if '\n' in same:
    same.remove('\n')

with open('some_output_file.txt', 'w') as FO:
    for line in same:
        FO.write(line)
代码语言:javascript
复制
$ python compare.py
['scandinavian t airline airline\n', 'speedbird t airline airline\n', 'one n 0 flightnumber\n']



$ cat some_output_file.txt 
scandinavian t airline airline
speedbird t airline airline
one n 0 flightnumber
票数 -1
EN

Stack Overflow用户

发布于 2014-06-17 10:00:29

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

代码语言:javascript
复制
 first = set(file1)
 second = set(file2)
 same = first.intersection(second)

.

编辑:

读到我的帖子上的一些评论,我确信你真的想要区别,而不是在设置上,而是在列表上。我想这应该对你有用:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24260548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档