0

ファイル全体をメモリにロードせずに、2 つの大きなテキスト ファイルを 1 行ずつ (それぞれ 10 GB) 比較しようとしました。他のスレッドで示されているように、次のコードを使用しました。

with open(in_file1,"r") as f1, open(in_file2,"r") as f2:
    for (line1, line2) in zip(f1, f2):
        compare(line1, line2)

しかし、python はファイルを 1 行ずつ読み取れないようです。コードの実行中のメモリ使用量が 20G を超えていることがわかりました。私も使ってみました:

import fileinput
for (line1, line2) in zip(fileinput.input([in_file1]),fileinput.input([in_file2])):
    compare(line1, line2)

これも、すべてをメモリにロードしようとします。Centos 5.9 で Python 2.7.4 を使用していますが、コードに行を保存しませんでした。

私のコードで何がうまくいかなかったのですか? すべてをRAMにロードしないようにするにはどうすればよいですか?

4

1 に答える 1

6

Python のzip関数は、タプルのリストを返します。そのため、このリストを構築するために完全なファイルをフェッチする場合。代わりにitertools.izipを使用してください。タプルのイテレータを返します。

with open(in_file1,"r") as f1, open(in_file2,"r") as f2:
    for (line1, line2) in izip(f1, f2):
        compare(line1, line2)
于 2013-08-10T06:37:27.313 に答える