Rosalind:Finding a Shared Motif

原始的输入文件:

Rosalind_1
GATTACA
Rosalind_2
TAGACCA
Rosalind_3
ATACA

# Finding a Shared Motif
# date:2020/5/29
# 这是我转载别人的文章,但是原始的我就不费劲找了,我只想好好
# 品一品这个脚本,以我小菜鸡的水平,我就是觉得写的很棒,
# 如果是大神,您就略过哈

###
首先下面这一段函数没有什么难度,就是把原始文件里面的序列
保存成列表的数据格式
###
def readfasta(filename, sample):
    fa = open(filename, 'r')
    fo = open(sample, 'w')
    res = {}
    rres = []
    ID = ''
    for line in fa:
        # 如果是">"开头的,就创建一个key键
        if line.startswith('>'):
            ID = line.strip('\n')
            res[ID] = ''
        # 如果不是">"开头的,在这个key键下添加value值
        else:
            res[ID] += line.strip('\n')
    # 把value值提取出,写入sample文件
    for value in res.values():
        rres.append(value)
        fo.write(value + '\n')
    #返回 ['TAGACCA','ATACA','GATTACA']
    return rres

###
第一个高潮来了哈
###
def fragement(seq_list):
    res = []
    seq = seq_list[0]       # TAGACCA
    # 上面的代码 seq 取出原始文件的第一个序列,
    # 这个无所谓,重要的是把这个序列所有的可能的正向组合全部排列出来
    # 这里面作者用了两个 for 循环完成的功能
    # 但是 第一个列表  s_seq是 从前往后切
    # 从第一个列表 s_seq得到的子序列 是从后往前切
    # 如果反应不过来,可以用 12345来试一试得到所有可能的正向组合
    for i in range(len(seq)):
        s_seq = seq[i:]
        for j in range(len(s_seq)):
            res.append(s_seq[:(len(s_seq) - j)])
    # 返回res列表的所有组合
    # T TA TAG TAGA TAGAC TAGACC TAGACCA
    # A AG AGA
    return res


def main(infile, sample):
    seq_list = readfasta(infile, sample)
    frags = fragement(seq_list)
    # 这里是最后一个高潮了,坚持一下
    # 首先这里的排序很重要,因为排序是从长到短排序,
    # 排序的方法保证了下面迭代的时候发现的 motif 其实是最长的
    # 最后的break对题目而言非常好,因为如果你的目的是得到唯一的最
    # 长 motif,那么break就可以终止运行,但是会忽略同样长度的其它motif
     frags.sort(key=len, reverse=True)  # 从长到短排列
    for i in range(len(frags)):
        ans = []
        for j in seq_list:
            # 把"所有组合"匹配到"列表"里面,有些匹配1次,有些匹配2次,
            # 匹配三次的就是share_motif
            r = j.count(frags[i])
            if r != 0:
                ans.append(r)
        # 判断匹配是否大于等于三次
        if len(ans) >= len(seq_list):
            # 打印匹配大于等于三次的
            print(frags[i])
            break


main('./Finding a Shared Motif', 'sample.txt')


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值