23

タブ区切りのファイルが 2 つあり、最初のファイルのすべての行を他のファイルのすべての行に対してテストする必要があります。例えば、

ファイル1:

row1    c1    36    345   A
row2    c3    36    9949  B
row3    c4    36    858   C

ファイル2:

row1    c1    3455  3800
row2    c3    6784  7843
row3    c3    10564 99302
row4    c5    1405  1563

col[1] が同じであれば、file1 の col[3] が file2 のどの (すべてではない) col[2] よりも小さい (file1) のすべての行を出力したいとします。

期待される出力:

row1    c1    36    345   A
row2    c3    36    9949  B

私は Ubuntu で作業しているので、入力コマンドを次のようにしたいと思います。
python code.py [file1] [file2] > [output]

次のコードを書きました。

import sys

filename1 = sys.argv[1]
filename2 = sys.argv[2]

file1 = open(filename1, 'r')
file2 = open(filename2, 'r')

done = False

for x in file1.readlines():
    col = x.strip().split()
    for y in file2.readlines():
        col2 = y.strip().split()
        if col[1] == col2[1] and col[3] < col2[2]:
            done = True
            break
        else: continue
print x

ただし、出力は次のようになります。

row2    c3    36    9949  B

これは大規模なデータセットでは明らかですが、基本的に、ネストされたループの条件が真であった最後の行のみを常に取得します。「ブレーク」が両方のループから抜け出しているのではないかと疑っています。(1) for ループの 1 つだけから抜け出す方法と、(2) これが私がここで抱えている唯一の問題であるかどうかを知りたいです。

4

2 に答える 2