2010-04-04 57 views
0

好友,如何提取一对夫妇从线(蟒蛇)标串

我花在这个一个相当长的一段时间......,但仍无法找出更好的办法来做到这一点。顺便说一句,我是用python编码的。

所以,这里是文字的,我有一个工作文件中的一行,例如:

“> REF | ZP_01631227.1 | 3脱氢合酶节球spumigena CCY9414] ...”

如何从行中提取两个字符串“ZP_01631227.1”和“Nodularia spumigena CCY9414”?

双“| |”和括号就像标记,所以我们知道我们想要得到两个字符串之间的...

我想我可以循环所有字符在行中,并做到这一点很难。它只需要很多时间...想知道是否有一个python库或其他聪明的方法很好地做到这一点?

谢谢大家!

回答

1
>>> for line in open("file"): 
...  if "|" in line: 
...   whatiwant_1=line.split("|")[1] 
...   if "[" in line: 
...    whatiwant_2=line.split("[")[1].split("]")[0] 
... 
>>> print whatiwant_1 , whatiwant_2 
ZP_01631227.1 Nodularia spumigena CCY9414 
+0

这正是我需要的解决方案!非常感谢! – GoJian 2010-04-04 17:25:56

4

一个简洁的选择是一个正则表达式(由于某种原因,他们在Python社区一个坏名声,但他们确实提供了简单的文本处理简洁和功率):

import re 
s = ">ref|ZP_01631227.1| 3-dehydroquinate synthase [Nodularia spumigena CCY9414]..." 
mo = re.search(r'\|(.*?)\|/*\[(.*?)\]', s) 
if mo: 
    thefirst, thesecond = mo.groups() 
+1

您是不是要说'mo = re.search(r'\ |(。*?)\ |。* \ [(。*?)\]',s)'? – 2010-04-04 07:02:09

+0

至于Python正则表达式在Python社区中声誉不佳的原因,我认为与Perl文档(perlrequick)相比,文档有点吓人。例如,充满示例的温和教程可以在当前're'文档的开头添加。 – EOL 2010-04-04 08:59:02

+0

@gnibbler,是的,我放弃了's',tx来发现,编辑修复。 – 2010-04-04 14:52:45