Pythonで化学式を構成元素に分解する
Pythonを用いて、化学式(組成式)を構成元素とその数に分割する方法です。
例えば、「C16H10ClN3」というように記載された化学式を、{C:16,H:10,Cl:1,N:3}という辞書データに分解することをゴールとしています。
関数の作成
化学式を入力して、構成要素を出力する関数を作成してみます。
1 2 3 4 5 6 7 8 |
def split_form(form): form_d={} for i in re.findall(r"[A-Z][^A-Z]*",form): elem = re.match(r"\D+", i).group() num = i.replace(elem,"") num = 1 if num == "" else num form_d[elem] = num return form_d |
まず正規表現を用いて、大文字で始まっている部分にすべて分解します。
その後で、その部分を更に英字部分と数字部分に分解しています。数字部分のないものは1としています。
実行結果
実行してみましょう。
1 |
split_form("C15H15ClN2O3S") |
1 |
{'C': '15', 'H': '15', 'Cl': 1, 'N': '2', 'O': '3', 'S': 1} |
もう1つやってみます。
1 |
split_form("C11H6BrF3N4O2S") |
1 |
{'C': '11', 'H': '6', 'Br': 1, 'F': '3', 'N': '4', 'O': '2', 'S': 1} |
正しく分割できているようです。
括弧を含む表記や、イオン、電子式には対応しておりませんのでご注意ください。