我有两个巨大的文件(file1和file2)。这两个文件都组织成行。我需要生成第三个文件file3,其中包含文件1但不在文件2中的行。这些行不是有序的。
在Windows中获取它的最简单(最智能)方法是什么?
答案 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