import abifpy from Bio.Seq import Seq from Bio.SeqRecord import SeqRecord from Bio.Emboss.Applications import NeedleCommandline import os #uso a funcao listdir from Bio import SeqIO def acessa_ab1(arquivo,trim=True): #generalizar depois """acessa um arquivo ab1 e retorna um objeto SeqRecord""" dado = abifpy.Trace(arquivo) if trim: cortado = dado.trim(dado.seq(ambig=True)) return SeqRecord(cortado, id=arquivo, description='dado cortado') else: return dado.seqrecord() def abre_ref(arquivo): """acessa um arquivo contendo uma sequencia de referencia retorna um objeto SeqRecord""" with open(arquivo, 'rUb') as dado: referencia = SeqIO.read(dado, 'genbank') return referencia def salva_fasta(obj_SeqRecord): """Pega um objeto SeqRecord e cria um fasta com a sua sequencia""" SeqIO.write([obj_SeqRecord], obj_SeqRecord + '.fasta','fasta') def processar_lote(diretorio, ref): """abre os arquivos ab1 de uma pasta, apara, salva em fasta, faz o alinhamento com o fasta de referencia e salva o alinhamento em um arquivo para analise posterior. diretorio --> uma string representando o caminho da pasta contendo os arquivos ref --> uma string representando o caminho absoluto + genbank com a sequencia de referencia. """ referencia = abre_ref(ref) referencia.id = 'sequencia de referencia' salva_fasta(referencia) ab1files = [x for x in os.listdir(diretorio) if x.endswith('.ab1')] for file in ab1files: dado = acessa_ab1(diretorio + file) salva_fasta(dado) needle_cline = NeedleCommandline(asequence='referencia.fasta', bsequence= file + '.fasta', gapopen=10, gapextend=0.5, outfile=file + "_aligned.txt") stdout, stderr = needle_cline() #pasta = '/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/' #referencia = '/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/BRCA1 (total) - Frag 3450.gb' #processar_lote(pasta, referencia) dado = acessa_ab1('/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/1174411_3450F_A01.ab1') print type(dado) salva_fasta(dado) ===============================error msg============== Traceback (most recent call last): File "louise.py", line 59, in salva_fasta(dado) File "louise.py", line 26, in salva_fasta SeqIO.write([obj_SeqRecord], obj_SeqRecord + '.fasta','fasta') File "/usr/lib/pymodules/python2.6/Bio/SeqIO/__init__.py", line 412, in write count = writer_class(handle).write_file(sequences) File "/usr/lib/pymodules/python2.6/Bio/SeqIO/Interfaces.py", line 271, in write_file count = self.write_records(records) File "/usr/lib/pymodules/python2.6/Bio/SeqIO/Interfaces.py", line 256, in write_records self.write_record(record) File "/usr/lib/pymodules/python2.6/Bio/SeqIO/FastaIO.py", line 134, in write_record self.handle.write(">%s\n" % title) AttributeError: 'SeqRecord' object has no attribute 'write'