2016-04-29 6 views
0

を引き抜きます。私はFASTA配列を含む大きなファイル(1つのヘッダおよびヘッダ以下の配列の1本のライン)とラインとの間に他のランダムジャンクと未組織間隔で読みたいだけFASTA配列パイソン

それぞれの行を読み込み、行が ">"記号で始まる場合(これは、fastaシーケンスヘッダーの開始方法です)、そのヘッダーをシーケンスとなる次の行と共に引き出します。

私は示すための小さな例のデータファイルを持っている:私のコード

> 1 
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt 
>2 
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG 
>3 
GCTAGCACCATGGAGACAGACACACTCCTGCTATG 


Task 2: Subclone the synthesized 

junk 

junk 

>4 
GCTAGCACCATGGAGACAGAC 

を:

f=open("File.fasta", "r") 
fastaseq = open("OnlyFastaseq.fasta", "w") 

for line in f: 
    line = line.strip('\n') 
    if line.startswith(">"): 
     title = line.rstrip() 
     seq = f.readline() 
     seq = seq.rstrip() 
     fastaseq.write(title+"\n"+seq+"\n") 

所望の出力:

> 1 
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt 
>2 
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG 
>3 
GCTAGCACCATGGAGACAGACACACTCCTGCTATG 
>4 
GCTAGCACCATGGAGACAGAC 

結果は、ヘッダのほとんどが含まれています+シーケンス、 '> 3'シーケンス以外はは、次の行(シーケンス)を引き出しませんでした。

> 1 
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt 
>2 
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG 
>3 
>4 
GCTAGCACCATGGAGACAGAC 
あなたが入力を反復処理し、その行を書く >で始まる行と入力ファイルからの next、例えば発見することにより、これらを除外でき

答えて

3

with open('File.fasta') as fin, open('OnlyFastaseq.fasta', 'w') as fout: 
    for line in fin: 
     if line.startswith('>'): 
      fout.write(line) 
      fout.write(next(fin)) 
+0

小警告:FASTA配列はしばしば80ヌクレオチド/アミノ酸のラインで分割され、従って複数の配列を有する配列を有することができる。この特定のケースでは、コードは完全に正常に動作します。より長いシーケンスの場合、部分シーケンスを返す可能性があります。 –

+0

@Ashafix興味深い - それに感謝します。私は確認されませんでした - それは問題として起動しますならば、私は私がbiopythonを提案するつもりだった(と私は前の質問のこれらの種類に遭遇してきたかなり確信している)の答え:) –

2

あなたがしたいことを試してみてくださいBioPython。それは確かに 'オープン'といくつかの解析で行うことができますが、BioPythonには他の多くの機能があります。 1つのシーケンスを一度に読むには、使用することができます。

from Bio import SeqIO 
fastaFile = "foo.fasta" 
handle = open(fastaFile,"r") 
for record in SeqIO.parse(handle,"fasta"): 
    print record.id 
handle.close() 

詳細については、SeqIO docsを参照してください。

+0

を修正することができると確信していファイルが既にFASTA形式...でなかったならば、それはグラグラを通じてたい場合 - –

+0

必ずそれはどちらかのジャンクを無視しない(すなわち、それが正常にOPはファイルであってもよい提案したジャンクを無視するだろう)。私はおそらく2つのタスクを分けるだろう。 (1)最初にジャンクを解析し、新しいクリーンなファイルを保存し、(2)fastaシーケンスを読み込みます。正規表現で簡単に行を確認することができます。 – ajrichards

0

次のコードは、所望の出力を与えます。 >で始まるヘッダーと有効なシーケンス、つまりATGCのみを出力します。

+1

3行、「>」識別子を有する第一、第二は、所望の配列であり、かつ第三のラインは単に「CATG」ことがあるときに何が起こるかを検討。あなたのコードはその第3行も印刷します。また、文字の1つが欠けている正しい行を印刷しません(「ATTA」のシーケンスが発生する可能性があります)。 –

+0

FASTAフォーマットの仕様は、>配列の行(複数可)に続いて始まるヘッダです。したがって、3行目も同様に印刷する必要があります。ヌクレオチドのサブセットしか持たない可能性を指摘してくれてありがとう。私はそれに応じて答えを変更します。 –

関連する問題