下面你可以找到用于计算给定序列中蛋白质质量的简单脚本
import re
def make_table(yy):
letter=r"^[A-Z]"
mass= r"[0-9]{1,2}"
#list of aa
table=open(yy,'r')
aa=[i for line in table for i in line if re.match(letter,i)]
table.close()
table=open(yy,'r').readlines()
xz=''.join([line[:-1] for line in table])
mass= re.findall(r"[-+]?\d*\.\d+|\d+", xz)
data = dict(zip(aa, mass))
#print data
calc_mass(seq, data)
def calc_mass(seq, data):
mass=[]
test=[]
for key, value in data.iteritems():
for aa in seq:
if aa==key:
#print aa, value #debug
test.append(aa)
mass.append(float(value))
if test==seq:
print "OK!"
mass_value=sum(mass)
print "The protein mass is %f" %(mass_value)
# DATASET
yy="table.txt"
input=open("sequence.txt",'r').readline().strip()
seq=list(input)
make_table(yy)
它基于给定的序列和表格,其中列出了每种氨基酸的每个质量。简而言之,它需要一些看起来像
的text.txt数据A 71.03711
C 103.00919
D 115.02694
E 129.04259
F 147.06841
G 57.02146
H 137.05891
I 113.08406
K 128.09496
L 113.08406
M 131.04049
N 114.04293
P 97.05276
Q 128.05858
R 156.10111
S 87.03203
T 101.04768
V 99.06841
W 186.07931
Y 163.06333
并将其转换为字典,然后在给定的序列中找到给定aa的相应质量。除了无法通过
之外,这个脚本工作得很完美if test==seq:
print "OK!"
因为seq和测试变量中氨基酸的顺序不同。如何在这样的迭代(在测试中获得)之后恢复初始顺序(在seq中给出)?是否还有其他可能性来检查所选键的值并将其移到单独的列表中?
感谢您的帮助,
格列勃
答案 0 :(得分:1)
而不是遍历整个data
并检查key
是否匹配seq
中的任何内容,实际上使用它是字典的事实:
for aa in seq:
mass.append(float(data[aa]))
现在mass
与seq
的顺序相同 - 如果在KeyError
中找不到任何aa
,则会data
}。