He abierto un archivo con la explosión de los resultados y se imprimen los éxitos en formato fasta a la pantalla.

El código se parece a esto:

result_handle = open("/Users/jonbra/Desktop/my_blast.xml")

from Bio.Blast import NCBIXML
blast_records = NCBIXML.parse(result_handle)
blast_record = blast_records.next()
for alignment in blast_record.alignments:
    for hsp in alignment.hsps:
        print '>', alignment.title
        print hsp.sbjct

Esta salida es una lista de fasta archivos a la pantalla.
Pero, ¿cómo puedo crear un archivo y guardar los fasta salida a este archivo?

Actualización: supongo que se tendría que reemplazar la impresión instrucciones dentro del bucle con algo.write(), pero ¿cómo será el ‘>’, la alineación.el título que hemos escrito?

InformationsquelleAutor Jon | 2009-11-05

5 Comentarios

  1. 7

    Primero, crear un objeto de archivo:

    f = open("myfile.txt", "w") # Use "a" instead of "w" to append to file

    Puede imprimir a un archivo objeto:

    print >> f, '>', alignment.title
    print >> f, hsp.sbjct 

    O puede escribir a:

    f.write('> %s\n' % (alignment.title,))
    f.write('%s\n' % (hsp.sbjct,))

    A continuación, puede cerrar a ser agradable:

    f.close()
    • todas las operaciones después de la apertura del archivo debe ser envuelto con intentar … por último, asegúrese de que el archivo va a ser cerrado correctamente
    • En un largo proceso de ejecución, sí, en un sencillo script que no importa como los archivos se cerrará cuando el script finaliza.
  2. 4

    Algo como esto

    with open("thefile.txt","w") as f
      for alignment in blast_record.alignments:
        for hsp in alignment.hsps:
          f.write(">%s\n"%alignment.title)
          f.write(hsp.sbjct+"\n")

    prefiere no usar print >> como que no funciona en Python3

  3. 4

    puede utilizar with statement para asegurarse de que el archivo se cierra

    from __future__ import with_statement
    
    with open('/Users/jonbra/Desktop/my_blast.xml', 'w') as outfile:
        from Bio.Blast import NCBIXML
        blast_records = NCBIXML.parse(result_handle)
        blast_record = blast_records.next()
        for alignment in blast_record.alignments:
            for hsp in alignment.hsps:
                outfile.write('>%s\n%s\n' % (alignment.title, hsp.sbjct))

    o uso try ... finally

    outfile = open('/Users/jonbra/Desktop/my_blast.xml', 'w')
    try:
        from Bio.Blast import NCBIXML
        blast_records = NCBIXML.parse(result_handle)
        blast_record = blast_records.next()
        for alignment in blast_record.alignments:
            for hsp in alignment.hsps:
                outfile.write('>%s\n%s\n' % (alignment.title, hsp.sbjct))
    finally:
        outfile.close()
  4. 2

    Hay dos enfoques generales. Fuera de python:

    python your_program.py >output_file.txt

    O, dentro de Python:

    out = open("output_file.txt", "w")
    for alignment in blast_record.alignments:
        for hsp in alignment.hsps:
            print >>out, '>', alignment.title
            print >>out, hsp.sbjct
    out.close()
  5. 0

    por alguna razón el código de arriba publicado por el OP no me funciona.. he modificado un poco

    from Bio.Blast import NCBIXML
    f = open('result.txt','w')
    for record in NCBIXML.parse(open("file.xml")) :
        for alignment in record.alignments:
            for hsp in alignment.hsps:
                f.write(">%s\n"%alignment.title)
                f.write(hsp.sbjct+"\n")

Dejar respuesta

Please enter your comment!
Please enter your name here