Pythonを使ってファイル操作、文字列の抽出の練習。
公共のデータベースから
Send to > File > Format; Synonyms(txt) > Create File
で、pcsubstance_result.txtというファイルを入手しました。
簡単に中身
1. ZINEB; zinc ethane-1,2-diylbis(dithiocarbamate); 12122-67-7 SID: 48425745 2. ZEARALENONE; 17924-92-4; (3S,11E)-14,16-dihydroxy-3-methyl-3,4,5,6,9,10-hexahydro-1H-2-benzoxacyclotetradecine-1,7(8H)-dione SID: 48425743 3. Zearalanol; 26538-44-3; (3S,7R)-7,14,16-trihydroxy-3-methyl-3,4,5,6,7,8,9,10,11,12-decahydro-1H-2-benzoxacyclotetradecin-1-one SID: 48425741 4. Vinylidene chloride; 1,1-Dichloroethene; 1,1-DICHLOROETHYLENE; 75-35-4 SID: 48425737 ‥‥
ここで、CAN登録番号だけが欲しい、とします。というか、今猛烈に欲しいです。
CASRNは
(7桁以下の数字列)-(2桁の数字列)-(1桁の数字列)
という構成なので、正規表現を用いて
\d-\d-\d
とでも書こうと思ったのだが、なんか\マークは認識されないし、Python上でもエラー頻発だったので、
[0-9]+-[0-9]+-[0-9]
で逃げました。
やっている最中でCASRNが定義されていない化合物も存在し、エラーを返してくるが、うまい書き方が分からなかったのでここだけ手動でごまかすという事態に。
もうちょっとうまく書けるようになれれば、と思う。
import os os.chdir("‥‥") # ファイル読み込みのためにディレクトリ変えました。 res=[] for line in open("pcsubstance_result.txt"): # ファイルが読み込めればよい。 res=res+[str(line)] # この時点で、\nといった改行コマンドも含んだ文字列リストができる。 # 先に化合物だけ抽出することにする。 chemicals=[] for i in range(0,len(res),4): chemicals=chemicals+[res[i]] # 正規表現を作るモジュールらしい。 # モジュールの扱いにはいまだ慣れない。 import re stan = re.compile("[0-9]+-[0-9]+-[0-9]") # CASRNを抽出できるはず。 m=stan.search(x) print m m.group() casrn=[] for i in range(len(chemicals)): res_search = stan.search(chemicals[i]) res_casrn = res_search.group() casrn=casrn+[res_casrn] if i < len(chemicals): casrn = casrn + ["NOCAS"] i = i + 1 while i < len(chemicals): res_search = stan.search(chemicals[i]) res_casrn = res_search.group() casrn=casrn+[res_casrn] i = i + 1 for i in range(len(casrn)): print casrn[i] for i in range(len(casrn)): print i+1,casrn[i]