Python:在字符串中查找字符串

时间:2015-04-13 19:53:15

标签: python-2.7

我想打印出“> sp |”之间的ID和“|”从文件中,所以输出应该是:

Q12955
Q16659
Q7Z7A1

示例文件f:

>sp|Q12955|ANK3_HUMAN Ankyrin-3 OS=Homo sapiens GN=ANK3 PE=1 SV=3
MAHAASQLKKNRDLEINAEEEPEKKRKHRKRSRDRKKKSDANASYLRAARAGHLEKALDY
IKNGVDINICNQNGLNALHLASKEGHVEVVSELLQREANVDAATKKGNTALHIASLAGQA

>sp|Q16659|MK06_HUMAN Mitogen-activated protein kinase 6 OS=Homo sapiens GN=MAPK6 PE=1 SV=1

MAEKFESLMNIHGFDLGSRYMDLKPLGCGGNGLVFSAVDNDCDKRVAIKKIVLTDPQSVK
HALREIKIIRRLDHDNIVKVFEILGPSGSQLTDDVGSLTELNSVYIVQEYMETDLANVLE
QGPLLEEHARLFMYQLLRGLKYIHSANVLHRDLKPANLFINTEDLVLKIGDFGLARIMDP

>sp|Q7Z7A1|CNTRL_HUMAN Centriolin OS=Homo sapiens GN=CNTRL PE=1 SV=2

MKKGSQQKIFSKAKIPSSSHSPIPSSMSNMRSRSLSPLIGSETLPFHSGGQWCEQVEIAD
ENNMLLDYQDHKGADSHAGVRYITEALIKKLTKQDNLALIKSLNLSLSKDGGKKFKYIEN
LEKCVKLEVLNLSYNLIGKIEKLDKLLKLRELNLSYNKISKIEGIENMCNLQKLNLAGNE

我的代码:

f=open('seq.fasta','r')

for idline in f:
    ID = re.findall('|......|',idline)
    print ID
    break

任何帮助将不胜感激,谢谢你提前!

1 个答案:

答案 0 :(得分:1)

如果ID始终位于两个垂直条的中间,那么您可以执行类似的操作,甚至不用担心正则表达式。 (从你的例子来看,假设他们总是在中间是安全的!)

f=open('seq.fasta','r')

for idline in f:
    if '>' in idline:
        lineSplit = idline.split('|')
        ID = lineSplit[1]
        print ID

输出

Q12955
Q16659
Q7Z7A1

如果确实有变化,你可以做这样的事情并循环直到你得到以Q开头的部分,然后打印出来。这两个给你相同的结果。

f=open('seq.fasta','r')

for idline in f:
    if '>' in idline:
        lineSplit = idline.split('|')
        for section in lineSplit:
            if (('OS=' not in section) and ('>sp' not in section)):
                ID = section
                print ID