我当前的多行fasta文件是这样的:
>chr1|chromosome:Mt4.0v2:1:1:52991155:1
ATGC...
>chr2|chromosome:Mt4.0v2:2:1:45729672:1
ATGC...
...等等。
我需要将fasta文件解析为单独的文件,该文件仅在标头(|之后的所有内容)中包含record.description,后跟序列。但是,我需要使用record.ids作为文件名(chr1.fasta,chr2.fasta等)。有什么办法吗?
我目前解决这个问题的尝试如下。它仅在标题中产生描述,最后一个序列record.id作为文件名。我需要单独的文件。
from Bio import SeqIO
def yield_records(in_file):
for record in SeqIO.parse(in_file, 'fasta'):
record.description = record.id = record.id.split('|')[1]
yield record
SeqIO.write(yield_records('/correctedfasta.fasta'), record.id+'.fasta', 'fasta')
答案 0 :(得分:0)
您的代码几乎包含了所有需要的内容。 yield
还可以返回多个值,即您可以同时返回文件名和记录本身,例如
yield record.id.split('|')[0], record
但是BioPython仍然会咬你,因为id
被写入了FASTA头。因此,您将需要同时修改id
和覆盖description
(否则将其串联到id
),或者只分配与您相同的值。
一个简单的解决方案是
from Bio import SeqIO
def split_record(record):
old_id = record.id.split('|')[0]
record.id = '|'.join(record.id.split('|')[1:])
record.description = ''
return old_id, record
filename = 'multiline.fa'
for record in SeqIO.parse(filename, 'fasta'):
record = split_record(record)
with open(record[0] + '.fa', 'w') as f:
SeqIO.write(record[1], f, 'fasta')