Guardar la salida de un for-loop a un archivo

Abrí un archivo con resultados asombrosos e imprimí los resultados en formato fasta en la pantalla.

El código se ve así:

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 

Esto genera una lista de archivos fasta en la pantalla. Pero, ¿cómo puedo crear un archivo y guardar la salida fasta en este archivo?

Actualización: Supongo que tendría que reemplazar las declaraciones de impresión dentro del bucle con something.write (), pero ¿cómo se escribe ‘>’, align.title?

    Primero, crea un objeto de archivo:

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

    Puede imprimir en un objeto de archivo:

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

    O puedes escribirle:

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

    A continuación, puede cerrarlo para ser agradable:

     f.close() 

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

    Prefiero no usar print >> ya que no funcionará más en Python3

    se puede utilizar with statement para garantizar que el archivo se cerrará

     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 use 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() 

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

    por alguna razón, el código publicado anteriormente por OP no funcionó para mí … modifiqué 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")