QIIME 请求此(此处)有关其作为输入接收的 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
当然遵循格式建议,并每 80 bps 分割序列。
我可以写我自己的作家来写那些“单行”斋戒 - 但我的问题是是否有一种方法我错过了让SeqIO
做到这一点。
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)
虽然@unode和@hongboZhu都提供了问题的有效答案,但他们使用了
FastaIO
。SeqIO
(至少现在,在 Python3 中)提供了以您想要的格式编写的功能:
from Bio import SeqIO
SeqIO.write(data, handle, 'fasta-2line')
@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)
或者只写文字。
g=open("outfile.fasta",'w')
for x in data:
g.write(f">{x.description}\n{x.seq}\n")