我有两个大文件(file1 和 file2)。这两个文件都组织成行。我需要生成第三个文件 file3,其中包含文件 1 但不在文件 2 中的行。这些行没有排序。
在 Windows 中获取它的最简单(最智能)的方法是什么?
最好的策略可能取决于文件到底有多大。如果第一个文件可以放入内存,那么您可以轻松地构建一组它的行,并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
.
虽然我自己可能会使用 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