You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Biopython的translate函数后,如何追踪FASTA序列中ATG起始密码子的位置

追踪FASTA序列中ATG密码子在翻译后的对应位置(Biopython实现)

嘿,我之前刚好处理过类似的需求,给你一步步拆解操作方法:

1. 读取FASTA文件并提取核苷酸序列

首先用Biopython的SeqIO模块读取你的FASTA文件,提取出目标核苷酸序列:

from Bio import SeqIO
from Bio.Seq import Seq
import re

# 替换成你的FASTA文件实际路径
record = next(SeqIO.parse("your_sequence.fasta", "fasta"))
nucleotide_seq = record.seq

2. 定位所有ATG密码子的位置

用正则表达式找出序列中所有ATG的起始位置(默认是Python的0-based索引,如果你需要生物学常用的1-based位置,后面可以加1转换):

# 找到所有ATG的0-based起始位置
atg_positions = [match.start() for match in re.finditer(r'ATG', str(nucleotide_seq))]

# 可选:转换为生物学常用的1-based位置
atg_positions_1based = [pos + 1 for pos in atg_positions]
print("所有ATG的1-based起始位置:", atg_positions_1based)

3. 翻译序列并关联ATG位置

根据你的实际需求,分两种常见场景处理:

场景A:翻译整个序列(默认阅读框)

如果你直接对整条序列进行翻译,需要把每个ATG的核苷酸位置对应到翻译后的氨基酸序列位置:

# 翻译整条序列(默认使用标准密码子表,阅读框1)
protein_seq = nucleotide_seq.translate()

# 建立ATG核苷酸位置到氨基酸位置的映射
atg_aa_mapping = {}
for nt_pos in atg_positions:
    # 检查该ATG是否处于当前阅读框内(阅读框1要求位置是3的倍数)
    if nt_pos % 3 == 0:
        aa_pos = nt_pos // 3
        # 确保不超出蛋白质序列的长度范围
        if aa_pos < len(protein_seq):
            atg_aa_mapping[nt_pos] = {
                "aa_position_0based": aa_pos,
                "aa_position_1based": aa_pos + 1,
                "amino_acid": protein_seq[aa_pos]
            }

# 打印结果
for nt_pos, details in atg_aa_mapping.items():
    print(f"核苷酸0-based位置{nt_pos}(1-based {nt_pos+1})的ATG,对应氨基酸0-based位置{details['aa_position_0based']}(1-based {details['aa_position_1based']}),氨基酸为{details['amino_acid']}")

场景B:从特定ATG开始翻译(作为起始密码子)

如果你想把某个ATG作为翻译的起始点,直接截取该位置后的序列进行翻译即可,此时这个ATG对应氨基酸序列的第0位:

# 选择第一个ATG作为起始点(你也可以根据需求选其他位置)
target_atg_pos = atg_positions[0]

# 截取从该ATG开始的核苷酸序列
coding_seq = nucleotide_seq[target_atg_pos:]

# 翻译(如果是真核生物CDS,可以加上cds=True参数,自动处理终止密码子)
target_protein = coding_seq.translate(cds=True)

print(f"从核苷酸0-based位置{target_atg_pos}(1-based {target_atg_pos+1})的ATG开始翻译,得到的蛋白质序列:\n{target_protein}")
print(f"该ATG对应的是蛋白质序列的第1个氨基酸(1-based):{target_protein[0]}")

注意事项

  • 密码子表:如果你的序列是原核生物、线粒体等特殊物种的,记得在translate()中指定table参数,比如translate(table=11)对应原核生物密码子表。
  • 终止密码子:默认translate()会把终止密码子翻译成*,如果设置cds=True,则会在第一个终止密码子处停止翻译,且不保留*。
  • 阅读框:如果需要检查另外两个阅读框,只需要调整判断条件为nt_pos %3 ==1或nt_pos%3 ==2,并重新计算对应的氨基酸位置即可。

内容的提问来源于stack exchange,提问作者Catalina Ardila Suarez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:10:55