spacepaste

  1.  
  2. import abifpy
  3. from Bio.Seq import Seq
  4. from Bio.SeqRecord import SeqRecord
  5. from Bio.Emboss.Applications import NeedleCommandline
  6. import os #uso a funcao listdir
  7. from Bio import SeqIO
  8. def acessa_ab1(arquivo,trim=True): #generalizar depois
  9. """acessa um arquivo ab1 e retorna um objeto SeqRecord"""
  10. dado = abifpy.Trace(arquivo)
  11. if trim:
  12. cortado = dado.trim(dado.seq(ambig=True))
  13. return SeqRecord(cortado, id=arquivo, description='dado cortado')
  14. else:
  15. return dado.seqrecord()
  16. def abre_ref(arquivo):
  17. """acessa um arquivo contendo uma sequencia de referencia
  18. retorna um objeto SeqRecord"""
  19. with open(arquivo, 'rUb') as dado:
  20. referencia = SeqIO.read(dado, 'genbank')
  21. return referencia
  22. def salva_fasta(obj_SeqRecord):
  23. """Pega um objeto SeqRecord e cria um fasta com a sua sequencia"""
  24. SeqIO.write([obj_SeqRecord], obj_SeqRecord + '.fasta','fasta')
  25. def processar_lote(diretorio, ref):
  26. """abre os arquivos ab1 de uma pasta, apara, salva em fasta, faz o alinhamento com
  27. o fasta de referencia e salva o alinhamento em um arquivo para analise
  28. posterior.
  29. diretorio --> uma string representando o caminho da pasta contendo os arquivos
  30. ref --> uma string representando o caminho absoluto + genbank com a
  31. sequencia de referencia.
  32. """
  33. referencia = abre_ref(ref)
  34. referencia.id = 'sequencia de referencia'
  35. salva_fasta(referencia)
  36. ab1files = [x for x in os.listdir(diretorio) if x.endswith('.ab1')]
  37. for file in ab1files:
  38. dado = acessa_ab1(diretorio + file)
  39. salva_fasta(dado)
  40. needle_cline = NeedleCommandline(asequence='referencia.fasta',
  41. bsequence= file + '.fasta', gapopen=10, gapextend=0.5,
  42. outfile=file + "_aligned.txt")
  43. stdout, stderr = needle_cline()
  44. #pasta = '/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/'
  45. #referencia = '/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/BRCA1 (total) - Frag 3450.gb'
  46. #processar_lote(pasta, referencia)
  47. dado = acessa_ab1('/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/1174411_3450F_A01.ab1')
  48. print type(dado)
  49. salva_fasta(dado)
  50. ===============================error msg==============
  51. <class 'Bio.SeqRecord.SeqRecord'>
  52. Traceback (most recent call last):
  53. File "louise.py", line 59, in <module>
  54. salva_fasta(dado)
  55. File "louise.py", line 26, in salva_fasta
  56. SeqIO.write([obj_SeqRecord], obj_SeqRecord + '.fasta','fasta')
  57. File "/usr/lib/pymodules/python2.6/Bio/SeqIO/__init__.py", line 412, in write
  58. count = writer_class(handle).write_file(sequences)
  59. File "/usr/lib/pymodules/python2.6/Bio/SeqIO/Interfaces.py", line 271, in write_file
  60. count = self.write_records(records)
  61. File "/usr/lib/pymodules/python2.6/Bio/SeqIO/Interfaces.py", line 256, in write_records
  62. self.write_record(record)
  63. File "/usr/lib/pymodules/python2.6/Bio/SeqIO/FastaIO.py", line 134, in write_record
  64. self.handle.write(">%s\n" % title)
  65. AttributeError: 'SeqRecord' object has no attribute 'write'
  66.