Cómo guardar la salida de python como tsv

Estoy usando el paquete biopython y me gustaría guardar el resultado como el archivo tsv. Esta salida de impresión a tsv.

for record in SeqIO.parse("/home/fil/Desktop/420_2_03_074.fastq", "fastq"): print ("%s %s %s" % (record.id,record.seq, record.format("qual"))) 

Gracias.

Eso es bastante simple, en lugar de imprimirlo, debe escribirlo en un archivo.

 with open("records.tsv", "w") as record_file: for record in SeqIO.parse("/home/fil/Desktop/420_2_03_074.fastq", "fastq"): record_file.write("%s %s %s\n" % (record.id,record.seq, record.format("qual"))) 

Y si desea nombrar las distintas columnas del archivo, puede usar:

 record_file.write("Record_Id Record_Seq Record_Qal\n") 

Por lo que el código completo puede parecer:

 with open("records.tsv", "w") as record_file: record_file.write("Record_Id Record_Seq Record_Qal\n") for record in SeqIO.parse("/home/fil/Desktop/420_2_03_074.fastq", "fastq"): record_file.write(str(record.id)+" "+str(record.seq)+" "+ str(record.format("qual"))+"\n") 

Mi solución preferida es usar el módulo CSV . Es un módulo estándar, así que:

  • Alguien más ya ha hecho todo el trabajo pesado.
  • Le permite aprovechar toda la funcionalidad del módulo CSV .
  • Puede estar bastante seguro de que funcionará como se espera (no siempre es el caso cuando lo escribo yo mismo).
  • No tendrá que reinventar la rueda, ya sea cuando escriba el archivo o cuando lo lea de nuevo en el otro extremo (no sé el formato de su registro, pero si uno de sus registros contiene un TAB , CSV). escapará correctamente para usted).
  • Será más fácil dar soporte cuando la próxima persona tenga que actualizar el código 5 años después de haber dejado la empresa.

El siguiente fragmento de código debería hacer el truco por ti:

 #! /bin/env python3 import csv with open('records.tsv', 'w') as tsvfile: writer = csv.writer(tsvfile, delimiter='\t', newline='\n') for record in SeqIO.parse("/home/fil/Desktop/420_2_03_074.fastq", "fastq"): writer.writerow([record.id, record.seq, record.format("qual")]) 

Tenga en cuenta que esto es para Python 3.x. Si está utilizando 2.x, el open y writer = ... serán ligeramente diferentes.

Si desea usar .tsv para etiquetar sus incrustaciones de palabras en TensorBoard, use el siguiente fragmento de código. Utiliza el módulo CSV (ver la respuesta de Doug ).

 # /bin/env python3 import csv def save_vocabulary(): label_file = "word2context/labels.tsv" with open(label_file, 'w', encoding='utf8', newline='') as tsv_file: tsv_writer = csv.writer(tsv_file, delimiter='\t', lineterminator='\n') tsv_writer.writerow(["Word", "Count"]) for word, count in word_count: tsv_writer.writerow([word, count]) 

word_count es una lista de tuplas como esta:

 [('the', 222594), ('to', 61479), ('in', 52540), ('of', 48064) ... ] 

El siguiente fragmento de código:

 from __future__ import print_function with open("output.tsv", "w") as f: print ("%s\t%s\t%s" % ("asd", "sdf", "dfg"), file=f) print ("%s\t%s\t%s" % ("sdf", "dfg", "fgh"), file=f) 

Produce un archivo output.tsv contiene

 asd sdf dfg sdf dfg fgh 

Así que, en tu caso:

 from __future__ import print_function with open("output.tsv", "w") as f: for record in SeqIO.parse("/home/fil/Desktop/420_2_03_074.fastq", "fastq"): print ("%s %s %s" % (record.id,record.seq, record.format("qual")), file=f) 

Prefiero usar join() en este tipo de código:

 for record in SeqIO.parse("/home/fil/Desktop/420_2_03_074.fastq", "fastq"): print ( '\t'.join((str(record.id), str(record.seq), str(record.format("qual"))) ) 

El carácter ‘pestaña’ es \t y la función de unión toma los (3) argumentos y los imprime con una pestaña en medio.