1
1

More than 5 years have passed since last update.

biopythonでNCBIのnuccoreデータベースからDNAデータをとってくる

Last updated at Posted at 2018-04-07

概要

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に設定されてしまうので
そこを注意しておく

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1