如何像 tsv 一样保存 python 的输出

How to save output from python like 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")))

谢谢。

以下代码段:

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)

这很简单,您需要将其写入文件而不是打印它。

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

我更喜欢在这种类型的代码中使用 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) 个参数并在它们之间打印一个制表符。

我的首选解决方案是使用 CSV 模块。这是一个标准模块,所以:

  • 其他人已经完成了所有繁重的工作。
  • 它允许您利用 CSV 模块的所有功能。
  • 您可以相当有信心它会按预期运行(当我自己编写时并非总是如此)。
  • 您不必重新发明轮子,无论是在写入文件时还是在另一端读回文件时(我不知道您的记录格式,但如果您的记录之一包含 TABCSV 将为您正确转义)。
  • 当你离开公司 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,openwriter = ... 会略有不同。

如果您想使用 .tsv 在 TensorBoard 中标记词嵌入,请使用以下代码段。它使用 CSV module (see ).

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