用于文件的Python正则表达式

时间:2016-04-14 10:04:46

标签: python regex expression

我想用RE过滤我的文件内容。 这是一个关于蛋白质的文件,每种蛋白质都有一些信息。

两种蛋白质的实例:

>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“[AG]。{4} GK [ST]”的蛋白质。

现在我有两个问题:

  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,名称,氨基酸等),而不仅仅是序列。我怎么能这样做?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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)]