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

Posted

技术标签:

【中文标题】使用 scikit-bio write 写入多个 fasta 条目【英文标题】:Write multiple fasta entries using scikit-bio write 【发布时间】:2016-01-13 22:36:20 【问题描述】:

我正在尝试使用 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】:

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

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

【讨论】:

以上是关于使用 scikit-bio write 写入多个 fasta 条目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 for 循环中将结果写入多个 CSV 文件

用于对齐的 TabularMSA 替换 (scikit-bio 0.4.1.dev0)

write_dynamic_frame.from_options 生成多个零件文件

#error “SSE2 指令集未启用”通过 pip 安装 scikit-bio 时

Mac M1 上的 scikit-bio 问题

scikit-bio 安装后不工作