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

时间:2015-04-27 12:20:05

标签: python save output

我正在使用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")))

谢谢。

5 个答案:

答案 0 :(得分:16)

我首选的解决方案是使用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,则openwriter = ...会略有不同。

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

如果您想使用.tsv在TensorBoard中标记单词嵌入,请使用以下代码段。它使用CSV模块(请参阅Doug's answer)。

# /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 :(得分: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)

答案 4 :(得分: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"))) )

'标签'字符为\t,连接函数使用(3)参数并使用中间的选项卡打印它们。