0

次のコードを使用して、2 つのテキスト ファイルを結合しています。

def combine_acpd_ccs(self, ccs_file, acps_file, out_file):

    with open(ccs_file, 'r') as in_file1:
        with open(acps_file, 'r') as in_file2:
            with open(out_file, 'w') as out1:
                out1.write('PDB\tPA\tEHSS\tACPS\n')
                for line in in_file1:
                    segs = line.split()
                    for i in in_file2:
                        sse_score = i.split()
                        #print line
                        #print segs
                        if segs[0][:-4] == sse_score[0]:
                            out1.write(segs[0][:-4]+'\t'+segs[1]+'\t'+segs[2]+'\t'+sse_score[1]+'\n')

サンプル データは次のようになります。

ccs_file:

1b0o.pdb    1399.0  1772.0
1b8e.pdb    1397.0  1764.0

acps_file:

1b0o    0.000756946316066
1b8e    8.40662008775
1b0o    6.25931529116

私は自分のアウトプットが次のようになると予想していました:

PDB PA  EHSS    ACPS
1b0o    1399.0  1772.0  0.000756946316066
1b0o    1399.0  1772.0  6.25931529116
1b8e    1397.0  1764.0 8.40662008775

しかし、私のコードは、予想される出力の上位 2 行を生成するだけです。segs2 番目のループで印刷するとfor、最初の行だけがccs_fileループに渡されます。私が間違っているアイデアはありますか?

4

1 に答える 1

7

in_file2問題は、外側のループの各反復後に再度開いたり巻き戻したりしないことです。

実行した

for i in in_file2:

in_file2ファイル ポインタが既にファイルの末尾に配置されているため、以降の反復試行はすべて何もしません。

ファイルが比較的小さい場合は、ccs_fileメモリにロードして、辞書検索のみを行うことができます。

于 2012-05-03T15:58:45.863 に答える