如何获取字典中两个短字符串之间的字符串... Python
问题描述:
早上好。 我有一个字典(在Python中)与键作为名称和值作为dna序列('acgt ...')。我需要从这个词典的值中得出两个特定三个字母('atg'作为起点和'taa','aag'或'tga'作为终点)之间的所有字符串。我尝试了几件事情,但没有得到像我想要的那样的东西。我无法在互联网上找到任何帮助。有人可以帮助我吗?由于如何获取字典中两个短字符串之间的字符串... Python
这是我的尝试:
我只知道怎么去之间的两个不同的指定索引的所有字符,但是这不是我想要的:这是一个非常小的例子:
opts= {'id1':'acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgacagctctcgcgcgcaagcgatacaccagctagaccagattaaaag', 'id2':'atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaaatgacacagccacagcgacagccagccagccatttttattttttaaagatgcaccgatacacaca'};
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])
答
这个问题可以通过使用Python的find
函数来解决。由于你的开始是固定的,end可以是三个字符串之一,我们将循环输入字符串以找到匹配的字符串。
str = "acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgacagctctcgcgcgcaagcgatacaccagctagaccagattaaaag"
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"])
答
import re
d = {'id1':'acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgacagctctcgcgcgcaagcgatacaccagctagaccagattaaaag',
'id2':'atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaaatgacacagccacagcgacagccagccagccatttttattttttaaagatgcaccgatacacaca'}
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
请张贴任何你都试过了。 – vks
你尝试了什么,哪些不起作用? – Jblasco
如果你可以设置字符串的例子和你期望得到的结果,甚至更好! – Jblasco