使用 BioPython 更改 FASTA 文件中的记录 ID
Changing the record id in a FASTA file using BioPython
我有以下 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
我找不到更好的解决方案(除了创建一个新的 SeqRecord),在我看来它看起来像一个错误
if record.id == 'foo':
record.id, record.name = ('bar',)*2
if record.description == 'foo':
record.description = 'bar'
我有以下 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我找不到更好的解决方案(除了创建一个新的 SeqRecord),在我看来它看起来像一个错误
if record.id == 'foo':
record.id, record.name = ('bar',)*2
if record.description == 'foo':
record.description = 'bar'