1

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

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 に答える