我是一個開始的python用戶(試圖學習生物信息學),並且我很難讓我的最終'for循環'正確。我使用了一個基於網絡的生物信息學程序來評估某些蛋白質(蛋白名稱和序列包含在ORF內)的亞細胞定位,我試圖解析結果(包含在targetp內)。我使用的基於網絡的程序截斷了蛋白質的名稱(並且不包括序列),並且我想解析我的結果文件,以便我具有FASTA格式中每種蛋白質的完整名稱和序列(this需要在一行上具有「>」+蛋白質名稱,並且在後續行上具有蛋白質序列)。我認爲一切都進展順利,直到最後一塊代碼;我最終得到了適當的蛋白質名稱,但它們都被添加到相同的序列中。我知道必須有一些簡單的事情,我做錯了,但我無法弄清楚。有任何想法嗎?Python'for loop'來解析結果
謝謝!
的ORF的文件如下所示(它是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最左邊的列是標識符(在上面每一個蛋白質序列的標題行的一部分),並且我想與一個「M僅返回條目'(即不是'_')在位置57以及來自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()
感謝您的幫助。您的修復程序讓我輸出,但不幸的是,我仍然沒有得到正確的輸出(顯然是我的錯誤)。在我的腳本中,所有protid名稱應該位於名稱列表名稱中(每個名稱的子集,因爲protid名稱是截斷的名稱列表名稱),但許多名稱列表名稱不在protid中。當我運行我的腳本時,我得到的輸出包括不在protid中但名稱列表中的名稱/序列。你有什麼想法,爲什麼這可能是? – mitochondrion
是的,縮進protfile.write bla bla bla以便它在if條件中。否則,即使它不符合if語句,它也會爲我運行。 – JGallo
再次感謝。我曾試過這種方法,但我的輸出只有3個序列,而應該是> 700。因此,即使所有protid名稱都是從名稱列表中的名稱派生的,我也只有3個滿足條件的protid名稱。有什麼我做錯了,這是顯而易見的?有沒有什麼方法可以顯示我正在處理的文件,以便更好地解決問題?對不起,所有的問題 - 我不擅長這個呢! – mitochondrion