使用 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 条目的主要内容,如果未能解决你的问题,请参考以下文章
用于对齐的 TabularMSA 替换 (scikit-bio 0.4.1.dev0)
write_dynamic_frame.from_options 生成多个零件文件