web-dev-qa-db-ja.com

python tsvのような出力を保存する方法

Biopythonパッケージを使用していますが、tsvファイルのような結果を保存したいと思います。これは、printから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")))

ありがとうございました。

12
Vonton

これはかなり単純です。印刷する代わりに、ファイルに書き込む必要があります。

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

私の好ましい解決策は、 [〜#〜] csv [〜#〜] モジュールを使用することです。これは標準モジュールなので、次のようになります。

  • 他の誰かがすでにすべての重労働を行っています。
  • [〜#〜] csv [〜#〜] モジュールのすべての機能を活用できます。
  • あなたはそれが期待通りに機能することをかなり確信することができます(私がそれを自分で書くときはいつもそうではありません)。
  • ファイルを書き込んだり、ファイルをもう一方の端で読み込んだりするときに、ホイールを作り直す必要はありません(レコード形式がわかりませんが、レコードの1つに 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 = ...は少し異なります。

19
Doug R.

.tsvを使用してTensorBoardのWord埋め込みにラベルを付ける場合は、次のスニペットを使用します。 [〜#〜] csv [〜#〜] モジュールを使用します( 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は、次のようなタプルのリストです。

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

次のスニペット:

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

私はこのタイプのコードで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"))) )

「タブ」文字は\tとjoin関数は(3)引数を取り、その間にタブを付けて出力します。

0
philshem