固定形式のデータを含む中程度の大きさのASCIIファイルが2つあります。最初のファイルの行の6つの指定されたフィールドが(指定された許容範囲内で)2番目のファイルの任意の行の6つのフィールドと一致するかどうかをテストし、共通の行を出力して処理を続行する必要があります。
私は現在、Fortranスタイルのラインリーダーを使用してファイル内の各行を分割し、各リストの各要素に対して正しいタイプのリストのリストを生成しています。両方のファイルのリストのリストを、それらを操作しながらメモリに保存しています。
比較する必要のあるフィールドはすべてフロートであり、現在、次のタイプのフローを使用しています。
tol = 0.01
for entry1 in file1List:
for entry2 in file2List:
if (abs(entry1[1] - entry2[1]) < tol and abs(entry1[2] - entry2[2]) < tol
and abs(entry1[3] - entry2[3]) < tol and abs(entry1[4] - entry2[4]) < tol
and abs(entry1[5] - entry2[5]) < tol and abs(entry1[6] - entry2[6]) < tol):
print entry1,entry2
これの実行は、行数が少ないファイルでは問題ありませんが、30000行を超えると、この部分だけの実行は1分以上になります。
はるかに高速な比較方法があるはずだと私はかなり確信していますが、それを見つけるのに苦労しています。助けていただければ幸いです。