我想打印出“> 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
任何帮助将不胜感激,谢谢你提前!
答案 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