2017-07-11 18 views
0

この質問はバイオインフォマティクスに関連しています。私は対応するフォーラムで提案を受け取っていないので、ここに書きます。biopythonのseqio.write()の "invalid sequence"エラー

私はfastaファイルで非ACTGヌクレオチドを削除し、biopythonのseqioを使用して新しいファイルに出力を書き込む必要があります。

私のコードにこのコードを実行する

import re 
import sys 
from Bio import SeqIO 
from Bio.SeqRecord import SeqRecord 
from Bio.Seq import Seq 
from Bio.Alphabet import IUPAC 


seq_list=[] 
for seq_record in SeqIO.parse("test.fasta", "fasta",IUPAC.ambiguous_dna): 
     sequence=seq_record.seq 
     sequence=sequence.tomutable() 
     seq_record.seq = re.sub('[^GATC]',"",str(sequence).upper()) 
     seq_list.append(seq_record) 
SeqIO.write(seq_list,"test_out","fasta") 

はエラーを与えている:

Traceback (most recent call last): 
    File "remove.py", line 18, in <module> 
    SeqIO.write(list,"test_out","fasta") 
    File "/home/ghovhannisyan/Software/anaconda2/lib/python2.7/site-packages/Bio/SeqIO/__init__.py", line 481, in write 
    count = writer_class(fp).write_file(sequences) 
    File "/home/ghovhannisyan/Software/anaconda2/lib/python2.7/site-packages /Bio/SeqIO/Interfaces.py", line 209, in write_file 
    count = self.write_records(records) 
    File "/home/ghovhannisyan/Software/anaconda2/lib/python2.7/site-packages/Bio/SeqIO/Interfaces.py", line 194, in write_records 
    self.write_record(record) 
    File "/home/ghovhannisyan/Software/anaconda2/lib/python2.7/site-packages/Bio/SeqIO/FastaIO.py", line 202, in write_record 
    data = self._get_seq_string(record) # Catches sequence being None 
    File "/home/ghovhannisyan/Software/anaconda2/lib/python2.7/site-packages/Bio/SeqIO/Interfaces.py", line 100, in _get_seq_string 
% record.id) 
TypeError: SeqRecord (id=CALB_TCONS_00001015) has an invalid sequence. 

私は例えばseq_record.seq = sequence + "A"すべてが正常に動作するこのライン

seq_record.seq = re.sub('[^GATC]',"",str(sequence).upper()) 

を変更した場合。しかし、re.sub('[^GATC]',"",str(sequence).upper())も理論上で動作するはずです。

答えて

1

BiopythonのSeqIOはSeqRecordオブジェクトの.seqは、配列オブジェクト(または類似)、いないプレーンな文字列であることを期待

感謝。試してください:

seq_record.seq = Seq(re.sub('[^GATC]',"",str(sequence).upper())) 

FASTA出力では、シーケンスのアルファベットを設定する必要はありません。

+0

ありがとう、完璧な作品! – Hrant