2016-04-14 30 views
0

我想用RE來過濾我的文件內容。 這是一個關於蛋白質的文件,每個蛋白質都有一些信息。Python的文件正則表達式

爲兩種蛋白質

實施例: 「[AG] {4} GK [ST]」

>sp|B3MGT3|AKTP2_DROAN (266 aa) 

Protein crossbronx-like. [Drosophila ananassae (Fruit fly)] 

MWYSIRNNQRMALIKQGYKILAEYRLVQDHLKNIYAIPSYASGLHWFGVIFVHSGIYAGSMFRFSILLPENFPDDTILPT 

VIFNAAIFHPHICPHSKSLDLGPCFKEWRKDQHHIWHLLRYIQAVFADPEGSICTGKSPSGDLVVLDEVNNLEALNMLAK 

SRPEYIKRIQELAISSRRHMYDKPMIEDPHYIIVEPYCAERHLRFMEQLKSPSWREATCEDDSPPAELLGHIDSSRQLDE 

DEANQRGKLQAATTDLQHGARCSVAQ 

     131 - 138:  GsictGKS 





>sp|Q9AT00|TGD3_ARATH (345 aa) 

Protein TRIGALACTOSYLDIACYLGLYCEROL 3, chloroplastic. [Arabidopsis thaliana (Mouse-ear cress)] 

MLSLSCSSSSSSLLPPSLHYHGSSSVQSIVVPRRSLISFRRKVSCCCIAPPQNLDNDATKFDSLTKSGGGMCKERGLEND 

SDVLIECRDVYKSFGEKHILKGVSFKIRHGEAVGVIGPSGTGKSTILKIMAGLLAPDKGEVYIRGKKRAGLISDEEISGL 

RIGLVFQSAALFDSLSVRENVGFLLYERSKMSENQISELVTQTLAAVGLKGVENRLPSELSGGMKKRVALARSLIFDTTK 

EVIEPEVLLYDEPTAGLDPIASTVVEDLIRSVHMTDEDAVGKPGKIASYLVVTHQHSTIQRAVDRLLFLYEGKIVWQGMT 

HEFTTSTNPIVQQFATGSLDGPIRY 

    117 - 124:  GpsgtGKS 

我需要過濾上述信息,僅用於與所述RE中的蛋白質在它們的序列。

現在我有2個問題:

  1. 這不工作...有誰知道爲什麼嗎?

    import re 
    file = open ("ploop.fa", "r") 
    motief = re.search("[AG].{4}GK[ST]", file) 
    
    for line in file: 
    if motief in line: 
    print (line) 
    
  2. 所以,我需要用於容納RE,不僅該序列中的蛋白質的所有信息(Accessioncode,姓名,氨基酸等)。我怎樣才能做到這一點?

+0

你明白'.'在正則表達式的特殊含義?此外,您正在嘗試打印的這個「行」是什麼?它沒有在任何地方定義。 –

+0

那麼,正則表達式[在您的文本中找不到任何匹配項](https://regex101.com/r/hI5gS8/1)。另外,您需要讀取文件以將文件內容傳遞給正則表達式。以上示例文本的確切預期輸出是什麼? –

+0

對於你的第一個問題,'line'應該是什麼? – Adib

回答

0

哦,那條'線'來自我嘗試過的其他東西。還試過:

import re 
file = open ("ploop.fa", "r") 
motief = re.search("[AG].{4}GK[ST]") 

for line in file: 
    if motief in line: 
    print (line) 

是的,一個點應該是一個隨機標記?我需要一個以A或G開始,然後是4個隨機字母,然後是GK,然後是S或T的序列。

+0

我們問的是文件中的行如何。例如,它是不是像'AGTASTAGTCTCTCTATGTGTCTATC'? – Adib

+0

這是一個蛋白質序列,不是DNA序列,所以幾乎所有的字母都是可能的。 (例如TKALLCKNFLKKWRM) – jordinec

+0

示例的屏幕截圖:http://i64.tinypic.com/ejbo2a.png – jordinec

0

您正在將變量motief設置爲等於re.MatchObject。然後在循環

if motief in line: 

可能永遠不會真正

你想要的是聲明一個正則表達式,然後用re.search每行找到,如果它的存在。

regex = "[AG].{4}GK[ST]" 
for line in f: 
    if re.search(regex, line): 
     print(line) 

列表解析版本創建的所有有用行的列表如下所示:

[line for line in f if re.search(regex, line)]