#はじめに
MOLファイルをSMILESに変換するpythonスクリプトを作成した。これだとどこにでもある話だが、標準入力からMOLファイル(MOL形式の文字列)を読み込んで、標準出力にSMILESを吐き出すようにした。これによって、ファイルを経由せずとも結果を得ることができ、より手軽に利用できる。
#環境
- Python3.6
- RDKit 2019.03.3.0
#ソース
ソースは以下の通りだ。
Mol2SMILESConvertor.py
import sys
from rdkit import Chem
def main():
f = sys.stdin
mol_block = ""
for line in f:
mol_block += line
mol = Chem.MolFromMolBlock(mol_block)
smiles = Chem.MolToSmiles(mol)
print(smiles)
if __name__ == "__main__":
main()
#使い方
以下のMOLファイルを例に使い方を説明する。
test.mol
2,3,6-PCB
RDKit 2D
15 16 0 0 0 0 0 0 0 0999 V2000
1.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 -3.0008 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2978 -3.7529 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.3380 -3.1546 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
-1.2955 -5.2529 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.3337 -5.8546 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
0.0048 -6.0009 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.3026 -5.2488 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.3002 -3.7488 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.3385 -3.1472 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 1 1 0
6 7 1 0
7 8 2 0
8 9 1 0
8 10 1 0
10 11 1 0
10 12 2 0
12 13 1 0
13 14 2 0
14 7 1 0
14 15 1 0
M END
$$$$
上のMOLファイルをcatしてこのスクリプトに食わせると、以下のようにSMILESが得られる。お手軽だ。
$ cat test.mol |python bin/Mol2SMILESConvertor.py
Clc1ccc(Cl)c(-c2ccccc2)c1Cl
#その他
- 複数の化合物が格納されたSDFファイル(SDF形式の文字列)を読み込んで、複数のSMILESをまとめて出力するとさらに便利だろう。