2010-04-04 48 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