使用Bio.SeqIO写入单行FASTA

5 投票
3 回答
4324 浏览
提问于 2025-04-18 09:23

QIIME 对它接收到的 fasta 文件有这样的要求(详细信息可以在这里找到):

这个文件是一个 FASTA 文件,里面的序列是单行格式的。也就是说,序列不会被分成多行,而是整个序列都在一行里。

Bio.SeqIO.write 当然是遵循格式推荐,并且每 80 个字符就会换行一次。我可以自己写一个程序来生成这种“单行”的 fasta 文件,但我想知道是否有其他方法可以让 SeqIO 直接做到这一点。

3 个回答

2

虽然 @unode 和 @HongboZhu 都给出了有效的答案,但他们使用了 FastaIO
SeqIO(现在在 Python3 中)提供了你想要的格式写入功能:

from Bio import SeqIO
SeqIO.write(data, handle, 'fasta-2line')
2

@unode 回答了这个问题。我只是想补充一下,今天起 write_file()write_record() 这两个来自 FastaIO 的函数已经被标记为过时了。所以可以考虑使用 as_fasta_2line() 函数,它可以把一个 fasta 记录转换成简单的两行字符串。

from Bio.SeqIO import FastaIO
records_list = [FastaIO.as_fasta_2line(record) for record in records]
handle.writelines(records_list)
7

BioPython的SeqIO模块使用FastaIO子模块来读取和写入FASTA格式的数据。

FastaIO.FastaWriter这个类可以让你每行输出不同数量的字符,但这个功能在SeqIO中并没有直接提供。你需要直接使用FastaIO

所以,不要使用:

from Bio import SeqIO
SeqIO.write(data, handle, format)

而是使用:

from Bio.SeqIO import FastaIO
fasta_out = FastaIO.FastaWriter(handle, wrap=None)
fasta_out.write_file(data)

或者

for record in data:
    fasta_out.write_record(record)

撰写回答