2017-07-11 2 views
0

Diese Frage bezieht sich auf Bioinformatik. Ich habe keine Vorschläge in entsprechenden Foren erhalten, also schreibe ich es hier.Fehler "Ungültige Sequenz" in seqio.write() von biopython

Ich muss Nicht-ACTG-Nukleotide in der Fasta-Datei entfernen und die Ausgabe in eine neue Datei schreiben, indem ich seqio von biopython verwende.

Mein Code ist

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") 

diesen Code Lauffehler ergibt:

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. 

Wenn ich diese Zeile ändern

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

zu zum Beispiel seq_record.seq = sequence + "A" alles funktioniert. Jedoch sollte auch theoretisch funktionieren.

Dank

Antwort

1

biopython des SeqIO das Objekt der SeqRecord erwartet .seq ein Seq Objekt (oder ähnlich) zu sein, nicht eine einfache Zeichenfolge. Versuchen:

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

Für FASTA Ausgang besteht keine Notwendigkeit, die Sequenz des Alphabets zu setzen.

+0

Danke, funktioniert perfekt! – Hrant

Verwandte Themen