0

300,000行以上のtxtファイルAと600,000行以上のtxtファイルBを取得しました。今私がやりたいことは、ファイルAを1行ずつふるいにかけることです。その行がファイルBに表示されない場合は、ファイルCに追加されます.

問題は、上で述べたようにプログラムすると、すべての作業を完了するのに文字通り何年もかかることです。これを行うためのより良い方法はありますか?

4

4 に答える 4

14

これはかなり速いはずです:

with open("a.txt") as a:
    with open("b.txt") as b:
        with open("c.txt", "w") as c:
            c.write("".join(set(a) - set(b)))

これは、A または B にあった順序を無視することに注意してください。A からの順序を絶対に保持する必要がある場合は、次のように使用できます。

with open("a.txt") as a:
    with open("b.txt") as b:
        with open("c.txt", "w") as c:
            b_lines = set(b)
            c.write("".join(line for line in a if not line in b_lines))
于 2012-04-24T16:09:17.733 に答える
1

Bを記憶に留めることができますか?その場合は、ファイル B を読み取り、そこに含まれるすべての行でインデックスを作成します。次に、A を 1 行ずつ読み、インデックスに表示されるかどうかを各行で確認します。

with open("B") as f:
    B = set(f.readlines())

with open("A") as f:
    for line in f.readlines():
        if line not in B:
           print(line)
于 2012-04-24T16:10:03.683 に答える
0

Pythonについては何も知りませんが、ファイルAを特定の順序でソートするのはどうですか? 次に、ファイル B を 1 行ずつ調べて、バイナリ検索を実行できます。より効率的です。

于 2012-04-24T16:08:43.680 に答える
0

ファイル B のすべての行を a に読み込みますset

blines = set(file_b)
for line in file_a:
    if not line in blines:
       append_to_file_c

600k+ は実際にはそれほど多くのデータではありません...

于 2012-04-24T16:09:47.047 に答える