2016-10-03 11 views
1

私はいくつかのDNA配列を持つfastaフォーマットのファイルを持っています。私は、同じシーケンスIDを維持しながら、別の小さいシーケンスの各シーケンスの内容を変更したい。 新しいシーケンスがリストにあります。Biopythonを使用してfastaファイルのDNA配列を変更する

with open("outfile.fa", "w") as f: 
    for seq_record in SeqIO.parse("ma-all-mito.fa", "fasta"): 
     for i in range(len(newSequences_ok)): 
      f.write(str(seq_record.id[i]) + "\n") 
      f.write(str(newSequences_ok[i]) + "\n") 

しかし、私は得る:

IndexError: string index out of range 

は、どのように私はそれが動作するようにコードを変更することができますか?問題は、元のfastaファイルと新しいシーケンスのリストの両方を反復する必要があることだと思います。

オリジナルのFASTAファイルは次のようになります。私が取得したい出力がある

newSequences_ok=[ATGG,TTTC,GGTA,CTCG] 

>Sequence1 
ATGATGCATGG 
>Sequence2 
TTTTGGGAATC 
>Sequence3 
GGGCTAACTAC 
>Sequence4 
ATCTCAGGAA 

また、新しい配列とリストこの1に似ている

>Sequence1 
ATGG 
>Sequence2 
TTTC 
>Sequence3 
GGTA 
>Sequence4 
CTCG 
+0

あなたが質問を保留している:http://stackoverflow.com/questions/39779488 http://stackoverflow.com/help/someone-answers – xbello

+0

また、 'newSequences_ok'何ですか? – xbello

+0

データ構造に関する詳細情報を提供してください。 BioPytonを使わずに最小限の作業例(すべての 'imports 'などを含む)を作成するのが最も簡単です。 btw:どのバージョンのBioPythonを使用していますか? – buhtz

答えて

1

これはかもしれないと思います作品:

records = SeqIO.parse("ma-all-mito.fa", "fasta") 
with open("outfile.fa", "w") as f: 
    for r, s in zip(records,newSequences_ok): 
     f.write(r.seq.seq.split('\n')[0] + '\n') 
     f.write(s + '\n') 

ていない場合は(とそれがない場合でも) - あなたが本当にどのようにBiopython作品をよく読んでする必要があります。あなたはSeqIO.parseを直接ファイルの行を返すものとして扱っていました。その代わりに、オブジェクトを返すseq属性を持つオブジェクトをSeqRecordとして返します。オブジェクトにはseq属性(これはあなたの望むもの)とalphabet属性の2つの属性があります。あなたはそれを変更しようとする前に、あなたが興味を持っている情報を抽出することに集中する必要があります。

+0

右だと思う:TypeError例外:「ジェネレータ」オブジェクトは、今 – newa123

+0

の添字ではありません:TypeError例外:書き込み()の引数はstrをしなければならない、newa123 @ –

+0

別のエラーがそれを試してみてくださいnewa123 @ – newa123

関連する問題