pythonで特定位置の文字以降を削除する方法(仮)
前書き
数値計算をしていると,[分子名]-[パラメータ]-[パラメータ].datみたいなファイル名を付けることがあります。ファイル名から分子名を抜き出すときにハイフンの位置を指定する必要があるのでその時の方法をまとめました。
方法
いくつか方法はあると思うのですが,reモジュールのfinditer関数を使う方法を紹介します。
import re
name = ['H2O-0-0.dat', 'O2-1-1.dat', 'Propan-1-ol-3-3.dat'] # data set
for molecule in name:
name_iter = re.finditer('-', molecule) # ハイフンの位置に関する情報のイテレーションオブジェクトを生成
index = [s.start() for s in name_iter] # list内包表記とstartメソッドによってハイフンの開始位置に関するリストを生成
molecule = molecule[:index[-2]] # 後ろから二番目のハイフンより前を抽出
print(molecule)
# H2O
# O2
# Propan-1-ol
これで「分子名にもハイフンがあったとしても」後ろから2番目のハイフンを指定することで分子名のみを抽出できます。
ファイル名のリストはglobモジュールを使えば得られるので割と汎用性は高いと思います。
後書き
そもそも分子名にハイフンを入れるなら区切り文字を「_」にしておけば解決なので,ファイル名を付ける際はちゃんと考えましょうねという話でした。