使用Bio.SeqIO编写单行FASTA

时间:2014-06-11 07:01:35

标签: python python-2.7 bioinformatics biopython fasta

QIIME请求此(here)关于它作为输入接收的fasta文件:

The file is a FASTA file, with sequences in the single line format. That is, sequences are not broken up into multiple lines of a particular length, but instead the entire sequence occupies a single line.

Bio.SeqIO.write当然跟在format recommendations之后,每隔80个bps拆分一次。 我可以写自己的作家来写那些“单行”的快速 - 但我的问题是,如果有一种方法我错过了让SeqIO做到这一点。

2 个答案:

答案 0 :(得分:6)

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)

答案 1 :(得分:1)

@unode 回答了这个问题。我只想补充一点,从今天起,write_file() 中的 write_record()FastaIO 已标记为 OBSOLETE。因此,另一种解决方案是使用 as_fasta_2line() 函数,它将 fasta 记录转换为普通的两行字符串。

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