使用Bio.SeqIO编写单行FASTA

问题描述 投票:0回答:4

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
做到这一点。

python python-2.7 bioinformatics biopython fasta
4个回答
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)

3
投票

虽然@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)

0
投票

或者只写文字。

g=open("outfile.fasta",'w')

for x in data:
    g.write(f">{x.description}\n{x.seq}\n")
© www.soinside.com 2019 - 2024. All rights reserved.