我有以下FASTA文件,original.fasta
:
>foo
GCTCACACATAGTTGATGCAGATGTTGAATTCACTATGAGGTGGGAGGATGTAGGGCCA
我需要将记录ID从foo
更改为bar
,因此我编写了以下代码:
from Bio import SeqIO
original_file = r"path\to\original.fasta"
corrected_file = r"path\to\corrected.fasta"
with open(original_file) as original, open(corrected_file, 'w') as corrected:
records = SeqIO.parse(original_file, 'fasta')
for record in records:
print record.id # prints 'foo'
if record.id == 'foo':
record.id = 'bar'
print record.id # prints 'bar' as expected
SeqIO.write(record, corrected, 'fasta')
我们在更改之前和之后打印了记录ID,并获得了预期的结果。我们甚至可以通过使用BioPython再次读取更正的文件并打印出记录ID:
来进行双重检查with open(corrected_file) as corrected:
for record in SeqIO.parse(corrected, 'fasta'):
print record.id # prints 'bar', as expected
但是,如果我们在文本编辑器中打开更正后的文件,我们会发现记录ID不是bar
而是bar foo
:
>bar foo
GCTCACACATAGTTGATGCAGATGTTGAATTCACTATGAGGTGGGAGGATGTAGGGCCA
如果我们使用普通的Python读取文件,我们可以确认这是写入文件的内容:
with open(corrected_file) as corrected:
print corrected.readlines()[0][1:] # prints 'bar foo'
这是BioPython中的错误吗?如果没有,我做错了什么以及如何使用BioPython更改FASTA文件中的记录ID?
答案 0 :(得分:2)
我找不到更好的解决方案(除了创建一个新的SeqRecord),在我看来它看起来像一个bug
if record.id == 'foo':
record.id, record.name = ('bar',)*2
if record.description == 'foo':
record.description = 'bar'