【发布时间】:2013-11-22 06:02:54
【问题描述】:
我是一个 Python 初学者(尝试学习生物信息学),我很难正确地完成我的最终“for 循环”。我使用基于网络的生物信息学程序来评估某些蛋白质的亚细胞定位(ORF 中包含的蛋白质名称和序列),我正在尝试解析结果(包含在 targetp 中)。我使用的基于网络的程序截断了蛋白质的名称(并且不包括序列),我想解析我的结果文件,以便我拥有 FASTA 格式的每个蛋白质的完整名称和序列(这个需要在一行上有一个“>”+蛋白质名称,在下一行有蛋白质序列)。我认为在最后一段代码之前一切都很顺利;我最终得到了正确的蛋白质名称,但它们都附加到相同的序列中。我知道一定有一些简单的事情我做错了,但我就是想不通。有什么想法吗?
谢谢!
ORFs 文件看起来像这样(它是 FASTA,但 " 不应该在那里,只有 >):
">HsaNP_000700支链酮酸脱氢酶E1,α多肽 MAVAIAAARVWRLNRGLSQAALLLLRQPGARGLARSHPPRQQQQFSSLDDKPQFPGASAEFIDKLEFIQPNVISGIPIYRVMDRQGQIINPSEDPHLPKEKVLKLYKSMTLLNTMDRILYESQRQGRISFYMTNYGEEGTHVGSAAALDNTDLVFGQYREAGVLMYRDYPLELFMAQCYGNISDLGKGRQMPVHYGCKERHFVTISSPLATQIPQAVGAAYAAKRANANRVVICYFGEGAASEGDAHAGFNFAATLECPIIFFCRNNGYAISTPTSEQYRGDGIAARGPGYGIMSIRVDGNDVFAVYNATKEARRRAVAENQPFLIEAMTYRIGHHSTSDDSSAYRSVDEVNYWDKQDHPISRLRHYLLSQGWWDEEQEKAWRKQSRRKVMEAFEQAERKPKPNPNLLFSDVYQEMPAQLRKQQESLARHLQTYGEHYPLDHFDK
">HsaNP_060914 丙酮酸脱氢酶磷酸酶前体 MPAPTQLFFPLIRNCELSRIYGTACYCHHKHLCCSSSYIPQSRLRYTPHPAYATFCRPKENWWQYTQGRRYASTPQKFYLTPPQVNSILKANEYSFKVPEFDGKNVSSILGFDSNQLPANAPIEDRRSAATCLQTRGMLLGVFDGHAGCACSQAVSERLFYYIAVSLLPHETLLEIENAVESGRALLPILQWHKHPNDYFSKEASKLYFNSLRTYWQELIDLNTGESTDIDVKEALINAFKRLDNDISLEAQVGDPNSFLNYLVLRVAFSGATACVAHVDGVDLHVANTGDSRAMLGVQEEDGSWSAVTLSNDHNAQNERELERLKLEHPKSEAKSVVKQDRLLGLLMPFRAFGDVKFKWSIDLQKRVIESGPDQLNDNEYTKFIPPNYHTPPYLTAEPEVTYHRLRPQDKFLVLATDGLWETMHRQDVVRIVGEYLTGMHHQQPIAVGGYKVTLGQMHGLLTERRTKMSSVFEDQNAATHLIRHAVGNNEFGTVDHERLSKMLSLPEELARMYRDDITIIVVQFNSHVVGAYQNQE
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()
【问题讨论】:
标签: python for-loop bioinformatics