2013-10-18 36 views
0

我想通過一個基因ID列表到URL。 gl存儲基因ID列表。我需要"?term="迭代列表中的元素並執行定義的函數。如何將基因ID列表傳遞給url?

import re 
import urllib2 

def sr(): 
    gl = [6323,6513] 

    # need to pass the list gl here: 
    s = urllib2.urlopen('http://www.ncbi.nlm.nih.gov/gene/?term=','r') 

    h = s.read() 
    s.close() 
    acc = re.search('gi=(.+?)&amp',h) 
    if acc: 
      ac = acc.group(1) 
      f = open("E:/t.txt", "w") 
      f.write(ac); 
      f.close() 
+3

你看過NCBI Entrez Utilities,他們的官方API用於搜索和下載數據嗎? Biopython有一個'Bio.Entrez'模塊來幫助使用它。 – peterjc

+0

我在下面的答案中提到如何使用for循環遍歷答案。但是在你的代碼中有更多的問題,包括使用're.search'不會查看文件句柄(你必須有一個循環來做到這一點) –

回答

0

我還不能肯定我明白你在找什麼,但也許urllib.urlencode是你在找什麼? urlencode會生成一個查詢字符串。您可以將其與基本URL一起傳遞給urllib.urlopen

我假設term的值應該用逗號分隔?

gl = [6323,6513] 
params = urllib.urlencode({"term": ','.join(map(str, gl))}) 
s urllib.urlopen('http://www.ncbi.nlm.nih.gov/gene/', params) 

正如彼得公雞在評論中提到的,你最好使用Entrez中,NCBI的官方API(guide here)。 Bio.Entrez提供了一個不錯的界面。

+0

概念很簡單我需要獲得指定的核苷酸ids您可以在基因id html頁面源代碼中找到核苷酸id,例如:http://www.ncbi.nlm.nih.gov/gene/?term = 6323,搜索「gi」它存儲核苷酸id。上面的代碼工作,如果只有1個基因ID給出,我需要提取基因ID列表 – knwleq1byego

+0

在發佈這個問題之前,我經歷了Ncbi eutils和Bio.Entrez,我們可以找到與特定核苷酸ID相關的基因ids列表,但是反過來是不可能的,因爲每個基因都有一個起始位置和位置,我們必須在這裏指定: – knwleq1byego

+0

Thanq David Robinson爲了您在代碼中的更正,它適用於您指定的更改,但我必須使用循環來分開每個提取過程爲列表中的每個基因id – knwleq1byego