首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 'for loop‘解析结果

Python 'for loop‘解析结果
EN

Stack Overflow用户
提问于 2013-11-21 15:56:40
回答 1查看 164关注 0票数 1

我是一个初学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(标题行)的蛋白质名称。

我的脚本是:

代码语言:javascript
复制
#!/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()
EN

回答 1

Stack Overflow用户

发布于 2013-11-21 16:11:04

是的,你正在写命名列表和序列名称,但是你从来没有更改过'name‘。所以如果你想得到不同的序列,你需要改变'name‘。你应该这样写:

代码语言:javascript
复制
protfile.write('>%s\n%s\n\n' % (nameslist[c], seqdict[nameslist[c]]))

那样的话,你就会得到正确的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20115332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档