两行文件之间的区别

时间:2012-09-07 05:51:05

标签: python windows file scripting

我有两个巨大的文件(file1和file2)。这两个文件都组织成行。我需要生成第三个文件file3,其中包含文件1但不在文件2中的行。这些行不是有序的。

在Windows中获取它的最简单(最智能)方法是什么?

2 个答案:

答案 0 :(得分:8)

最佳策略可能取决于文件的确切程度。如果第一个文件可以放入内存中,那么您可以轻松地构建一组行,并从该集合中删除file2中的行。这需要大小与file1大小成比例的内存量。

with open('file1') as f1:
    lineset = set(f1)
with open('file2') as f2:
    lineset.difference_update(f2)
with open('file3', 'w') as out:
    for line in lineset:
        out.write(line)

请注意,此解决方案还可以消除file1中的重复行。

答案 1 :(得分:0)

虽然我自己可能会使用set方法,但标准库中的另一个选项是difflib

from difflib import Differ

with open('a.txt') as a, open('b.txt') as b:
    missing_from_b = [
        diff[2:] for diff in Differ().compare(a.readlines(), b.readlines())
        if diff.startswith('-')
    ]
    print missing_from_b