我是一个初学python的用户(试图学习生物信息学),我很难让我的最后一个'for loop‘正确。我使用了一个基于网络的生物信息学程序来评估某些蛋白质的亚细胞定位(包含在ORF中的蛋白质名称和序列),我正在尝试解析结果(包含在targetp中)。我使用的基于web的程序截断了蛋白质的名称(不包括序列),我想解析我的结果文件,以便以FASTA格式获得每个蛋白质的完整名称和序列(这需要在一行上有一个'>‘+蛋白质名称,在随后的一行上有蛋白质序列)。我认为一切都很顺利,直到最后一段代码;我最终得到了正确的蛋白质名称,但它们都附加到相同的序列中。我知道一定有什么地方我做错了,但我就是想不通。有什么想法吗?
谢谢!
ORFs文件看起来像这样(它是FASTA,但是“不应该在那里,只是>”):
">HsaNP_000700支链酮酸脱氢酶E1,α多肽“
">HsaNP_060914丙酮酸脱氢酶磷酸酶前体“
targetp文件如下所示(M位于位置57,但此处的格式化将其去掉):
HsaNP_000700 445 0.939 0.020 0.089 M 1
HsaNP_060914 537 0.309 0.073 0.629 _4
targetp中最左边的一列是标识符(上面每个蛋白质序列的标题行的一部分),我只想返回57位带有'M‘(即不是'_')的条目,以及来自ORF(标题行)的蛋白质名称。
我的脚本是:
#!/usr/bin/python
ORFs = open('Human.MitoCarta.fasta', 'U')
targetp = open('MitoCarta_TargetP_combined.out', 'U')
report = targetp.readlines()
protfile = open('mitocarta_no_mTP.fasta','w')
protid = []
seqdict = {}
for seq in ORFs:
seq = seq.rstrip()
if seq[0] == '':
continue
if seq[0] == '>':
name = seq[1:]
seqdict[name] = ''
continue
seqdict[name] += seq
for entry in report:
if entry.startswith('HsaNP'):
if entry[57] != 'M':
protid.append(entry[0:20])
protid = [x.strip(' ') for x in protid]
nameslist = seqdict.keys()
c = 0
for i in protid:
if i in nameslist[c]:
protfile.write('>%s\n%s\n\n' % (nameslist[c], seqdict[name]))
c += 1
protfile.close()发布于 2013-11-21 16:11:04
是的,你正在写命名列表和序列名称,但是你从来没有更改过'name‘。所以如果你想得到不同的序列,你需要改变'name‘。你应该这样写:
protfile.write('>%s\n%s\n\n' % (nameslist[c], seqdict[nameslist[c]]))那样的话,你就会得到正确的结果。
https://stackoverflow.com/questions/20115332
复制相似问题