2013-10-18 4 views
0

url에 gene id 목록을 전달하려고합니다. gl은 gene id 목록을 저장합니다. 목록의 요소를 반복하고 정의 된 함수를 수행하려면 "?term="이 필요합니다. 나는 긍정적 인 아니에요url에 gene id 목록을 전달하는 방법은 무엇입니까?

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

검색 및 다운로드 한 데이터에 대한 공식 API 인 NCBI Entrez Utilities를 살펴 보셨습니까? Biopython은 이것을 사용하도록 설계된'Bio.Entrez' 모듈을 가지고 있습니다. – peterjc

+0

내가 대답을 반복하는 방법에 대한 루프를 사용하는 방법을 아래에 내 대답을 언급했다. 하지만 코드에 더 많은 문제가 있습니다. re.search를 사용하면 파일 핸들을 살펴 보지 않을 것입니다. (루프를 사용해야합니다.) –

답변

0

난 당신이 찾고있는 것을 이해하지만, 아마도 urllib.urlencode은 당신이 찾고있는 무엇인가? urlencode은 쿼리 문자열을 생성합니다. 이 URL을 기본 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

개념은 간단합니다. 지정된 뉴클레오티드 ID를 가져와야합니다. gene id는 유전자 id html 페이지 소스 코드에서 뉴클레오티드 ID를 찾을 수 있습니다 (예 : http : //www.ncbi.nlm.nih.gov/gene/? term = 6323, "gi"를 검색하면 뉴클레오티드 ID를 저장합니다). 위의 코드는 유전자 id가 1 개만 주어지면 작동합니다. – knwleq1byego

+0

이 질문을 게시하기 전에 Ncbi eutils와 Bio.Entrez를 거쳐 특정 뉴클레오티드 ID와 관련된 유전자 ids 목록을 찾을 수 있습니다. 그 반대는 불가능합니다. 각 유전자는 시작 위치와 위치가 있습니다. – knwleq1byego

+0

Thanq David Robinson이 코드를 수정하기 위해 지정한대로 변경 작업을 수행하지만 별도의 루프를 사용해야합니다. 목록의 각 유전자 ID에 대한 각 추출 프로세스 – knwleq1byego

관련 문제