2012-11-26 38 views
3

這就是我想要做的。 我有例如基因名稱的列表:[ITGB1,RELA,NFKBIA]使用biopython從entrez獲得基因序列

往上看在biopython和教程爲Entrez的API幫助,我想出了這一點:

x = ['ITGB1', 'RELA', 'NFKBIA'] 
for item in x: 
    handle = Entrez.efetch(db="nucleotide", id=item ,rettype="gb") 
    record = handle.read() 
    out_handle = open('genes/'+item+'.xml', 'w') #to create a file with gene name 
    out_handle.write(record) 
    out_handle.close 

但是這樣下去錯誤。我發現,如果ID是一個數字ID(雖然你必須使它在一個字符串使用,「186972394」這樣:

handle = Entrez.efetch(db="nucleotide", id='186972394' ,rettype="gb") 

這讓我我想其中包括序列信息

所以現在到了一個問題: 如何搜索基因的名字(因爲我沒有身份證號碼)或容易我的基因名稱轉換爲ID,以獲得序列的基因名單上有

謝謝,

+0

http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc101喜歡這個? 'handle = Entrez.esearch(db =「nucleotide」,term =「Cypripedioideae [Orgn] AND matK [Gene]」)' –

+0

種類.... handle = Entrez。esearch(db =「nucleotide」,term =「Homo [orgn] AND RELA [gene]」)就是我用的一個例子,因爲我想要人類基因RELA,但是這會返回一個命中列表。第一個恰好是我想要的,但我的基因列表大約有100個基因。如何使用您指出的方法確保每個基因都能獲得正確的ID?我只會給出ID列表。 – StudentOfScience

回答

3

首先是基因名稱,如:ATK1

item = 'ATK1' 
animal = 'Homo sapien' 
search_string = item+"[Gene] AND "+animal+"[Organism] AND mRNA[Filter] AND RefSeq[Filter]" 

現在我們有一個搜索字符串SEACH IDS的

handle = Entrez.esearch(db="nucleotide", term=search_string) 
record = Entrez.read(handleA) 
ids = record['IdList'] 

這將返回ID作爲一個列表,如果,如果沒有ID發現它是[]。現在讓我們假設它返回列表中的1個項目。

seq_id = ids[0] #you must implement an if to deal with <0 or >1 cases 
handle = Entrez.efetch(db="nucleotide", id=seq_id, rettype="fasta", retmode="text") 
record = handleA.read() 

這會給你一個FASTA字符串可以保存到一個文件

out_handle = open('myfasta.fasta', 'w') 
out_handle.write(record.rstrip('\n')) 
+0

它是'handleA'還是'handle' – dexterdev

0

查看教程的第8.3節,似乎有一個函數可以讓您搜索術語並獲得相應的ID(我對這個庫一無所知,甚至對生物學知之甚少,所以這可能是完全錯誤的: ))。

>>> handle = Entrez.esearch(db="nucleotide",term="Cypripedioideae[Orgn] AND matK[Gene]") 
>>> record = Entrez.read(handle) 
>>> record["Count"] 
'25' 
>>> record["IdList"] 
['126789333', '37222967', '37222966', '37222965', ..., '61585492'] 

從我可以告訴,id是指實際的身份證號碼由esearch功能(在IdList屬性的響應)返回。但是,如果您使用term關鍵字,則可以運行搜索並獲取匹配項目的ID。完全未經測試,但假設搜索支持布爾運算符(它看起來像AND作品),你可以嘗試使用類似的查詢:

>>> handle = Entrez.esearch(db="nucleotide",term="ITGB1[Gene] OR RELA[Gene] OR NFKBIA[Gene]") 
>>> record = Entrez.read(handle) 
>>> record["IdList"] 
# Hopefully your ids here... 

要生成術語插入,你可以做這樣的事情:

In [1]: l = ['ITGB1', 'RELA', 'NFKBIA'] 

In [2]: ' OR '.join('%s[Gene]' % i for i in l) 
Out[2]: 'ITGB1[Gene] OR RELA[Gene] OR NFKBIA[Gene]' 

record["IdList"]然後可以通過使用像被轉換成一個逗號分隔的字符串,並傳遞給id論點原始查詢:

In [3]: r = ['1234', '5678', '91011'] 

In [4]: ids = ','.join(r) 

In [5]: ids 
Out[5]: '1234,5678,91011' 
+0

我很欣賞這個,但是正如你預測的那樣(但不是我想要的...... Kinda)這是爲什麼:handle = Entrez.esearch(db =「nucleotide」,term =「Homo [orgn] AND RELA [gene] 「)是我使用的例子,因爲我想要智人sapien基因RELA,但是這會返回一個命中列表。第一個恰好是我想要的,但我的基因列表大約有100個基因。如何使用您指出的方法確保每個基因都能獲得正確的ID?我只會給出ID列表。 – StudentOfScience

+0

@StudentOfScience嗯,所以我對此的理解是它返回了一個結果列表,是否正確?標準搜索中有沒有一種方法可以獲得基因的確切信息?或者是一個總是涉及的搜索?假設你知道第一個結果就是你想要的結果,那麼你可以把第一個元素放在my_list [0]中。如果這還不夠精確,我假設你可以做一些類似拉動結果的事情,然後比較一部分輸出結果,看看它是否與你的基因相匹配,但這聽起來不像最佳解決方案。 – RocketDonkey

+0

是的,那是我不知道的,以及我所問的。如果有一種方法可以直接給物種+基因名稱並獲得ID以便後來使用FASTA或直接給予FASTA文件(Fasta或輸出任何文件) – StudentOfScience

相關問題