使用scikit-bio write编写多个fasta条目

时间:2016-01-13 22:36:21

标签: python bioinformatics skbio

我正在尝试使用scikit-bio读取FASTA文件条目,然后如果满足某些要求,则将某些条目写回另一个文件。我遇到的问题是.write方法似乎打开和关闭文件,因此每个条目都会覆盖前一个。

In [39]: f = 'seqs.fna'
         seqs = skbio.io.read(f, format='fasta')
         for seq in seqs:
             if seq.metadata['id'] in ['47P50SDHBQ1PA_0', '4OZ9UI889OL5V_1', '2EC8VWHQD1LW5_2']:
                 print('True')
                 seq.write('foo.txt')

True
True

我希望在这种情况下,两个条目将写入foo.txt,但只有最后一个条目存在。如何将满足我的标准的所有序列写入文件?

1 个答案:

答案 0 :(得分:3)

写入相同的打开文件,而不是指定文件路径:

with open('output.fna', 'w') as output_fh:
    for seq in skbio.io.read('seqs.fna', format='fasta'):
        if seq.metadata['id'] in ['47P50SDHBQ1PA_0', '4OZ9UI889OL5V_1', '2EC8VWHQD1LW5_2']:
            seq.write(output_fh)

或者,您可以使用skbio.io.write编写序列生成器:

def filtered_seqs():
    for seq in skbio.io.read('seqs.fna', format='fasta'):
        if seq.metadata['id'] in ['47P50SDHBQ1PA_0', '4OZ9UI889OL5V_1', '2EC8VWHQD1LW5_2']:
            yield seq

skbio.io.write(filtered_seqs(), format='fasta', into='output.fna')