I'm trying to write a simple script using Biopython (1.61 and Python 3.2 in windows)to go through a fasta file containing DNA sequences, translate the sequences in the three forward reading frames, and write the protein sequences to a new fasta file with the id's slightly modified.
I am getting a strange error where it appears a record object is somehow being treated as a tuple, which is breaking SeqIO.write() I thought I must somehow be doing the conversion accidentally, but don't see where.
Any help would be greatly appreciated.
Here is my code:
from Bio import SeqIO from Bio.Seq import Seq from Bio.SeqRecord import SeqRecord from Bio.Alphabet import generic_protein def readSeqs(filenames): prots = for file in filenames: for seq_record in SeqIO.parse(file, "fasta"): for prot in [translateSeq(seq_record)]: prots.append(prot) return prots def translateSeq(record): prot1 = SeqRecord(record.seq.translate(table="Yeast Mitochondrial"),record.id)#normal RF seq2=Seq(str(record.seq)[1:]) prot2= SeqRecord(seq2.translate(table="Yeast Mitochondrial"),record.id+'RF2')#RF+1 seq3=Seq(str(record.seq)[2:]) prot3 = SeqRecord(seq3.translate(table="Yeast Mitochondrial"),record.id+'RF3')#RF+2 return prot1,prot2,prot3 def writeOutput(prots): filename = "ContigProteins.fasta" #change accordingly SeqIO.write(prots,filename, "fasta") print('file created') def main(): prots = readSeqs(['ContigCDS.fasta']) writeOutput(prots) main()
and here is the error message:
Traceback (most recent call last): File "C:\pathtoscript", line 31, in <module> main() File "C:\pathtoscript", line 28, in main writeOutput(prots) File "pathtoscript", line 23, in writeOutput SeqIO.write(prots,filename, "fasta") File "C:\Python32\lib\site-packages\Bio\SeqIO\__init__.py", line 426, in write count = writer_class(fp).write_file(sequences) File "C:\Python32\lib\site-packages\Bio\SeqIO\Interfaces.py", line 254, in write_file count = self.write_records(records) File "C:\Python32\lib\site-packages\Bio\SeqIO\Interfaces.py", line 239, in write_records self.write_record(record) File "C:\Python32\lib\site-packages\Bio\SeqIO\FastaIO.py", line 174, in write_record id = self.cleanrecord.id) AttributeError: 'tuple' object has no attribute 'id'