pythonで一致したIDを取得する処理の高速化
$ input_A
@ID_1
aaaa
+
nnnn
@ID_2
bbbb
+
nnnn
...
@ID_50000000
zzzz
+
nnnn
$ inputB
ID_832-aaa
ID_12020-aaa-bbb
ID_1-nnn-nnn
ID_9999-ddd-aaa-ccc
ID_2-xxx-xxx
...
ID_20000000-aaa
上記のような2つのファイルから、一致したinputBのID情報とinputAのID下の配列情報を取得したいと考えています。
どちらも2000万〜5000万件程度あります。
inputAの配列とIDはbiopythonというモジュールを使用して取得させ、下記のような処理を行いました。
しかし、配列数が多いためか処理時間がかかってしまい、数千万件処理するのに数百時間かかる見込みで実用的ではありません。
現実的な処理時間でこのような処理を行うにはどうすればよいでしょうか。
よろしくお願いします。
for a in seqIO.parse(inputA, 'fastq'):
for b in inputB:
if a.id == b.split('-')[0]
result = ">" + str(b) + str(q.seq) + '\n'
下記のようなOutputを想定しています。
$ result
>ID_1-nnn-nnn
aaaa
>ID_2-xxx-xxx
bbbb
...
>ID_50000000-aaa-bbb-ccc
zzzz
追記
inputBのID番号(先頭から-まで)と、inputAのID(@より後ろ)が一致したinputBの行(resultの>行)と、その下にinputAの@の下の行を引用したファイルをresultとして作成しようとしています。
@ID_50000000の@はミスです。修正しました。
inputAの+行とその下は不要です。
inputAの@行は重複なし、inputBのID(ID_X)は重複ありですが、行全体(ID_X-abc-abc)は重複なしです。
pythonのバージョンは2.7.10を使用しています。