J'utilise un package biopython et je voudrais enregistrer le résultat comme un fichier tsv. Cette sortie de l'impression vers 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")))
Je vous remercie.
C'est assez simple, au lieu de l'imprimer, vous devez l'écrire dans un fichier.
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")))
Et si vous souhaitez nommer les différentes colonnes du fichier, vous pouvez utiliser:
record_file.write("Record_Id Record_Seq Record_Qal\n")
Ainsi, le code complet peut ressembler à:
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")
Ma solution préférée consiste à utiliser le module CSV . C'est un module standard, donc:
L'extrait de code suivant devrait faire l'affaire pour vous:
#! /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")])
Notez que c'est pour Python 3.x. Si vous utilisez 2.x, les open
et writer = ...
sera légèrement différent.
Si vous souhaitez utiliser le .tsv
pour étiqueter vos incorporations Word dans TensorBoard, utilisez l'extrait de code suivant. Il utilise le module CSV (voir réponse 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
est une liste de tuples comme ceci:
[('the', 222594), ('to', 61479), ('in', 52540), ('of', 48064) ... ]
L'extrait suivant:
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)
Donne un fichier output.tsv
contenant
asd sdf dfg
sdf dfg fgh
Donc, dans votre cas:
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)
Je préfère utiliser join()
dans ce type de code:
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"))) )
Le caractère 'tabulation' est \t
et la fonction de jointure prend les arguments (3) et les affiche avec un onglet entre les deux.