与Python比较

时间:2013-08-14 15:04:10

标签: python python-2.7

我有2个文件(1个旧文件和1个新文件),它们具有我需要比较的相同结构,然后返回新列表唯一的数据。

每个文件都是TAB分隔的,看起来像这样(每个长约16k行):

8445    200807
8345    200807
ect.    ect.

我对使用循环进行比较有基本的了解,但我不确定如何将相应的数据列与其他2个相应的列进行比较。

编辑:对不起,我想要的结果有些混乱。所以,如果我这是我的旧文件:

8445    200807
8345    200807

这是我的新文件:

8445    200807
8445    200809

我希望脚本返回:

8445    200809

因此该对必须是新文件的唯一。如果这是有道理的。

2 个答案:

答案 0 :(得分:2)

这是我能想到的最直接的方式。纯粹主义者可能会抱怨它不使用with声明,因此请注意。

def compare_files()
    f1 = open('old')
    f2 = open('new')

    d1 = set()

    for line in f1:
        d1.add(line)

    for line in f2:
        if not line in d1:
            yield line

并像这样使用它:

 for line in compare_files():
     print "not in old", line,

答案 1 :(得分:0)

我猜你想要什么:两个文件共有的一组行。这是两个文件的交集,即

with open("file1") as f1, open("file2") as f2:
    rows1 = set(ln.split() for ln in f1)
    rows2 = set(ln.split() for ln in f2)

    for row in rows1 & rows2:
        print("\t".join(row))

但这会改变行的顺序。如果您想要仅出现在第一个文件中的行,请将&替换为-