我想用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]”的蛋白质。
现在我有两个问题:
这不起作用......有谁知道为什么?
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)
因此,我需要含有RE的蛋白质的所有信息(Accessioncode,名称,氨基酸等),而不仅仅是序列。我怎么能这样做?
答案 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)]