2 つの大きなファイル (file1 と file2) があります。両方のファイルは行に編成されています。ファイル 1 には存在するがファイル 2 には存在しない行を含む 3 番目のファイル file3 を生成する必要があります。行は順序付けされていません。
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