ろ過

2016-12-03 7 views
-4

は、私はこのような、あまりにも多くの行があります。ろ過

>ENSG00000100206|ENST00000216024|DMC1|2371|38568257;38570043|38568289;38570286 
CTCAGACGTCGGGCCGACGCAAGGCCACGCGCGCGAACACACAGGTGCGGCCCCGGGCCA 
CACGCACACCGTACAC 
>ENSG00000001630|ENST00000003100|CYP51A1|3210|92134365|92134530 
TATATCACAGTTTCTTTCTTTTTTTTTTTTTTTTTTTTGAGACAGAGTTTTGCTCTTGTT 
GCCCAGGCTGGAGTACAGTGACGCAATCTCGGCTCACTGCAACCTTTGCCTCCCAGGTTC 
>ENSG00000100206|ENST00000216024|DMC1|2371|38568257;38570043|38568289;38570286 
TTAACTATAATCCCACTGCCTATTTTTTTATTTCTAAAAATATCATAAAAAGACACAAAA 

を(>で始まる)最初の行は識別子であり、他のラインはシーケンスであり、また、各識別子は独自の配列を有しています。上記の例では、ENSG00000100206は名前であり、ENST00000216024はisoformです。私のファイルには同じ名前の識別子行がいくつかありますが、それ以外はすべて異なります。 それぞれの名前の最長シーケンスを取得して新しいファイルを作成したいと思います。つまり、各名前の繰り返しは1つだけです(ただし、シーケンスが最も長くなります)。 上記の例のための結果は次のようになります:

>ENSG00000100206|ENST00000216024|DMC1|2371|38568257;38570043|38568289;38570286 
CTCAGACGTCGGGCCGACGCAAGGCCACGCGCGCGAACACACAGGTGCGGCCCCGGGCCA 
CACGCACACCGTACAC 
>ENSG00000001630|ENST00000003100|CYP51A1|3210|92134365|92134530 
TATATCACAGTTTCTTTCTTTTTTTTTTTTTTTTTTTTGAGACAGAGTTTTGCTCTTGTT 
GCCCAGGCTGGAGTACAGTGACGCAATCTCGGCTCACTGCAACCTTTGCCTCCCAGGTTC 

は、あなたたちはPythonでそれを行う方法を知っていますか?

+2

これらの行のすべてを繰り返し処理するコードから始めます。 –

+3

コード作成サービスではありません。これまでに試したことを提示することで、少なくともいくらかの努力をしなければなりません。 –

+0

@matias elgart:いいえ、しないでください。何百万もの書かれたものが存在するときにあなた自身のパーサーを書く必要はありません。 – JulienD

答えて

1

あなたは正しいFASTA形式パーサーを取得するためにBiopythonを使用して起動することができます:http://biopython.org/wiki/SeqIO

はその後、レコードを反復し、あなたも一緒にやりたいです。これにより、パーサを書く時間が節約されるだけでなく、完全に間違ってしまうこともありません。

まさにそのページからの例:代わりに、印刷の

from Bio import SeqIO 
for record in SeqIO.parse("example.fasta", "fasta"): 
    print(record.id) 

、長さが長い場合にのみ、あなたが更新のdict {record.id: record.length}を作成します。

+0

真実ですが、これは答えではありません –

+0

私は彼のコードを書くつもりはないし、コメントには合わないと思うが、役に立つと思う。さらに、私はコメントの中でmatias elgartの助言に従うことを彼に嫌うだろう。 – JulienD