bioinformatics - 使用 BioPython 更改 FASTA 文件中的记录 ID

标签 bioinformatics 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'

关于bioinformatics - 使用 BioPython 更改 FASTA 文件中的记录 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335565/

相关文章:

javascript - BLOSUM62(或 45)在 JavaScript 中评分

r - 从数据框创建数据框

Numpy 和 Biopython 必须集成吗?

python - 从多序列比对中输出相同的列

python - 将网格放置在一组无序点上的算法

c - 如何使用 kseq.h 解析 FASTA 文件

linux - 如何将文件列表传递给并行命令并执行下游命令,例如 samtools?

python - 从循环中的序列中获取下一组字母

python - 如何从 efetch(Biopython、Entrez)中提取摘要?

python - 在 Mac 上更新 python 版本