概要
NCBIのnuccoreデータベースから
検索条件にあるDNAデータをfastaファイルで出力するというスクリプトを作る
パッケージ読み込み,proxy設定
BiopythonのEntrezパッケージを主に利用した
Entrezは裏でurlibを利用して動いているらしくproxy設定のためにurlibも使用。
コマンドラインから検索したい種や属の指定,配列名を渡し、genus,genameに格納する。
また,メールアドレスはきちんと自分のものを使用してください。とのことです。
from Bio import Entrez
import urllib
import sys
genus = sys.argv[1]
gename = sys.argv[2]
#proxy設定,設定によって{}の中身を変更する
#userid,passwordの部分はユーザ認証が必要ない場合省いてもよい
proxy = urllib.request.ProxyHandler({"http": "http://userid::password@proxy:por",
"https": "https://userid::password@proxy:port"})
opener = urllib.request.build_opener(proxy)
urllib.request.install_opener(opener)
#ncbiに連絡先としてメールアドレスを記述する必要がある。
Entrez.email = "hogehoge@gmail.com"
検索条件に合致するIDをとってくる
keywordsに検索条件をstr型で格納市,esearchに渡す。
種,属などで検索したい場合は[Orgn],genome name で検索したい場合は[Gene],全ての項目で検索したい場合は[ALL]など指定ができる。Advenced searchと同じだと思われる
keywords = str(genus+"[Orgn] AND "+gename+"[Gene]")
handle = Entrez.esearch(db="nuccore",term = keywords,retmax = 100000)
record = Entrez.read(handle)
gi_list = record["IdList"]
fastaファイルに書き出す
file = open(...fas)によってfastaファイルを開く
file = open(str(genus)+"_"+str(array)+".fasta","w")
record = Entrez.efetch(db="nuccore", rettype="fasta", retmode="text", id=gi_str,retmax = 100000)
file.write(record.read())
file.close()file.close()
efetch,esearchはretmaxを指定しない場合,デフォルトで20に設定されてしまうので
そこを注意しておく