搜索
查看: 3110|回复: 2

python [Rosalind]-14 [LCSM] Finding a Shared Motif 最大公共motif

[复制链接]

5

主题

21

帖子

882

积分

高级会员

Rank: 4

积分
882
QQ
发表于 2017-3-8 10:33:36 | 显示全部楼层 |阅读模式
本帖最后由 zd200572 于 2017-3-8 10:38 编辑

才学python,不才,水平太差,编程能力几乎还没有,学习了各位的前13个程序,依葫芦画瓢,第14题实在想不出算法,查找了许多最大子序列的算法,还是没搞定。最后在github上搜索Rosalind,找到了一个大神的解答,在这里斗胆发帖,告诉大家github上有大牛的解答。这里贴上一题。这个题目原程序有一个readFasta模块不知道怎么导入,应该是作者自己的模块?参考各位之前的程序,补上了几行,让程序跑了起来。但是,运行原题的那个txt文件会报错keyerror, 而运行几条序列正常,不知为何,还请各位指正。初次发帖,多多关照!
[Python] 纯文本查看 复制代码
'''
A solution to a ROSALIND bioinformatics problem.
Problem Title: Finding a Shared Motif
Rosalind ID: LCSM
Rosalind #: 014
URL: [url]http://rosalind.info/problems/lcsm/[/url]
'''

def LongestSubstring(string_list):
        '''Extracts all substrings from the first string in a list, and sends longest substring candidates to be checked.'''
        longest = ''
        for start_index in range(len(string_list[0])):
                for end_index in range(len(string_list[0]), start_index, -1):
                        # Break if the length becomes too small, as it will only get smaller.
                        if end_index - start_index <= len(longest):
                                break
                        elif CheckSubstring(string_list[0][start_index:end_index], string_list):
                                longest =  string_list[0][start_index:end_index]

        return longest

def CheckSubstring(find_string, string_list):
        'Checks if a given substring appears in all members of a given collection of strings and returns True/False.'
        for string in string_list:
                if (len(string) < len(find_string)) or (find_string not in string):
                        return False
        return True

seq = {}
seq_name = ''
with open('C:\\Users\\shenyou\\Desktop\\bioinfo\\workflow\\lcms.txt', encoding='utf-8') as f:
        for line in f:
                if line[0] == '>':
                        seq_name = line.rstrip()
                        seq[seq_name] = ''
                        continue
                else:
                        seq[seq_name] += (line.rstrip()).upper()
        
print(seq)

if __name__ == '__main__':
    dna = []
    for seq_name in seq:
            dna.append(seq[seq_name])

    lcsm = LongestSubstring(dna)
    print(lcsm)
    with open('014_LCSM.txt', 'w') as output_data:
            output_data.write(lcsm)





上一篇:第四章 统计推断(生物统计学基础)
下一篇:如何得到基因的GO注释?
初学菜鸟,欢迎交流!刚学习了《Python生物信息学数据管理》。
https://github.com/zd200572/
http://www.zd200572.com
回复

使用道具 举报

0

主题

16

帖子

145

积分

注册会员

Rank: 2

积分
145
发表于 2017-5-20 17:46:40 | 显示全部楼层
python也没学多久,大概思路和你一样。但是用了一些小技巧,可能稍微要快一些。

但是暴力搜索总是要比动态规划慢,期待看到动态规划的答案。

[AppleScript] 纯文本查看 复制代码
def readfasta(filename, sample):
    fa = open(filename, 'r')
    fo = open(sample, 'w')
    res = {}
    rres = []
    ID = ''
    for line in fa:
        if line.startswith('>'):
            ID = line.strip('\n')
            res[ID] = ''
        else:
            res[ID] += line.strip('\n')

    for key in res.values():
        rres.append(key)
        fo.write(key + '\n')
    return rres


def fragement(seq_list):
    res = []
    seq = seq_list[0]
    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)])

    return res


def main(infile, sample):
    seq_list = readfasta(infile, sample)
    frags = fragement(seq_list)
    frags.sort(key=len, reverse=True)
    for i in range(len(frags)):
        ans = []
        # s = 0
        # m+=1
        # print(m)
        # res[frags[i]] = 0
        for j in seq_list:
            r = j.count(frags[i])
            if r != 0:
                ans.append(r)
        if len(ans) >= len(seq_list):
            print(frags[i])
            break


main('rosalind_lcsm.txt', 'sample.txt')

回复 支持 1 反对 0

使用道具 举报

5

主题

21

帖子

882

积分

高级会员

Rank: 4

积分
882
QQ
 楼主| 发表于 2017-3-8 10:37:08 | 显示全部楼层
https://github.com/jschendel/Rosalind
这是大神的github地址,一些程序会报错'gbk' codec can't encode character, 查大神的博客文件读写的时候要加上encoding='utf-8'
初学菜鸟,欢迎交流!刚学习了《Python生物信息学数据管理》。
https://github.com/zd200572/
http://www.zd200572.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-9-22 00:12 , Processed in 0.033567 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.