rosalind Finding a Protein Motif

发布于 2024-03-11  8 次阅读


from re import finditer  # 导入正则表达式模块中的 finditer 方法
from urllib.request import urlopen  # 导入 urllib.request 模块中的 urlopen 方法,用于打开 URL

uniport = "http://www.uniprot.org/uniprot/%s.fasta"  # UniProt 数据库中蛋白质信息的 URL模板

# 打开包含蛋白质ID的文件
with open('rosalind_mprt.txt', 'r') as file:
    # 逐行读取蛋白质ID
    for protein in file:
        protein = protein.strip()  # 去除行末尾的换行符等空白字符
        # 从UniProt数据库中获取蛋白质序列内容
        f = urlopen(uniport % protein).read().decode('utf-8')

        lines = f.splitlines()  # 将蛋白质序列内容按行分割为列表
        if len(lines) > 1:  # 检查蛋白质序列是否包含多于一行的内容
            f = ''.join(lines[1:])  # 合并除第一行外的所有行作为蛋白质序列内容
        else:
            print('Error: Protein sequence is too short for', protein)  # 输出错误信息并跳过处理下一个蛋白质
            continue

        # 使用正则表达式查找磷酸化位点序列的位置
        locs = [g.start() + 1 for g in finditer(r'(?=N[^P][ST][^P])', f)]

        # 如果找到多个磷酸化位点序列,输出蛋白质ID和位置信息
        if locs and len(locs) > 1:
            print(protein)
            print(' '.join(map(str, locs)))  # 将位置信息转换为字符串并以空格分隔输出
最后更新于 2024-03-11