-1

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

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

8445    200807
8345    200807
ect.    ect.

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

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

8445    200807
8345    200807

这是我的新文件:

8445    200807
8445    200809

我希望脚本返回:

8445    200809

所以这对必须是新文件唯一的。如果这是有道理的。

4

2 回答 2

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,
于 2013-08-14T15:11:23.343 回答
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))

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

于 2013-08-14T15:14:35.567 回答