2015-10-29 112 views
-5

早上好。 我有一个字典(在Python中)与键作为名称和值作为dna序列('acgt ...')。我需要从这个词典的值中得出两个特定三个字母('atg'作为起点和'taa','aag'或'tga'作为终点)之间的所有字符串。我尝试了几件事情,但没有得到像我想要的那样的东西。我无法在互联网上找到任何帮助。有人可以帮助我吗?由于如何获取字典中两个短字符串之间的字符串... Python

这是我的尝试:

我只知道怎么去之间的两个不同的指定索引的所有字符,但是这不是我想要的:这是一个非常小的例子:

opts= {'id1':'acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgaca‌​gctctcgcgcgcaagcgatacaccagctagaccagattaaaag', 'id2':'atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaaatgacacagccacag‌​cgacagccagccagccatttttattttttaaagatgcaccgatacacaca'}; 
keys=list(opts.keys()) 
print(keys) 
value=list(opts.values()) 
print(value) 
i='atg' 
j='taa' 
for i in range (len(value)): 
    for j in range(i): 
    print(value[j:i]) 
+2

请张贴任何你都试过了。 – vks

+0

你尝试了什么,哪些不起作用? – Jblasco

+1

如果你可以设置字符串的例子和你期望得到的结果,甚至更好! – Jblasco

回答

1

这个问题可以通过使用Python的find函数来解决。由于你的开始是固定的,end可以是三个字符串之一,我们将循环输入字符串以找到匹配的字符串。

str = "acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgaca‌​gctctcgcgcgcaagcgatacaccagctagaccagattaaaag" 

def str_between(str, first, last): 
    start = str.find(first) + len(first) 
    end = str.find(last[0], start) 
    index = 1 
    while(end == -1 and index < len(last)): 
      end = str.find(last[index], start) 
      index= index + 1 
    if end !=-1: 
      return str[start:end] 
    else: 
      return '' 

以两个参数调用此函数,如下所述。您必须传递每个键的值作为输入。

output = str_between(str, "atg", ["taa","aag","tga"]) 
+0

谢谢!你的代码给我返回了一个错误: 第29行:NameError:name's'未定义 第29行:return s [start:end] – Francisco

+0

什么是错误?我改变了一点。再检查一遍。我跑它没有给错误。看看是否正确复制了字符串。如果没有匹配,我也没有做错误处理。照顾这一点。 – Sharad

+0

非常感谢Sharad ......最后一个问题,我希望我不要打扰太多。正如你在这个字符串中看到的那样,有几个起点和几个终点。我如何获得起点和终点之间所有可能片段的字符串。我能解释一下自己吗?谢谢。 – Francisco

1
import re 
    d = {'id1':'acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgaca‌​gctctcgcgcgcaagcgatacaccagctagaccagattaaaag', 
     'id2':'atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaaatgacacagccacag‌​cgacagccagccagccatttttattttttaaagatgcaccgatacacaca'} 

    for k,v in d.items(): 
     dna = re.split(r'\W',v) 
     for el in dna: 
      if el: 
      mo= re.search(r'(atg.*taa|atg.*tga|atg.*aag)', el) 
      if mo: 
       print(mo.group(1)) 

    atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaa 
    atgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaa 
相关问题