2015-04-27 4 views
2

Я использую пакет biopython, и я хотел бы сохранить результат, как tsv-файл. Этот вывод выводится из печати в tsv.Как сохранить вывод из python как 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"))) 

спасибо.

ответ

3

Это довольно просто, вместо того, чтобы печатать его вам нужно записать это в файл.

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

И если вы хотите, чтобы назвать различные столбцы в файле, то вы можете использовать:

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

Таким образом, полный код может выглядеть следующим образом:

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

Следующий фрагмент кода:

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) 

Урожайность файл output.tsv, содержащий

asd sdf dfg 
sdf dfg fgh 

Таким образом, в вашем случае:

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

Я предпочитаю использовать join() в этом типе кода:

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

Символ 'tab' равен \t, а функция join принимает (3) аргументы и печатает их с вкладкой между ними.

+0

Вопрос о написании содержимого в файл. – ZdaR

6

Мое предпочтительное решение - использовать модуль CSV. Это стандартный модуль, поэтому:

  • Кто-то еще сделал все тяжелые работы.
  • Он позволяет использовать все функции модуля CSV.
  • Вы можете быть достаточно уверены, что он будет функционировать должным образом (не всегда, когда я сам его пишу).
  • Вам не придется изобретать колесо, когда вы пишете файл или когда вы читаете его обратно на другом конце (я не знаю вашего формата записи, но если одна из ваших записей содержит TAB, CSV избежит его правильно для вас).
  • Будет легче поддерживать, когда следующий человек должен будет обновить код через 5 лет после того, как вы покинули компанию.

Следующий фрагмент кода должен сделать трюк для вас:

# /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")]) 

Обратите внимание, что это для Python 3.x. Если вы используете 2.x, то open и writer = ... будут немного отличаться.

Смежные вопросы