1

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

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

4

2 回答 2

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.

于 2012-09-07T05:55:33.010 回答
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
于 2012-09-07T06:27:34.610 回答