LoginSignup
0
1

More than 3 years have passed since last update.

SDFを分割するスクリプトを作ってみた

Last updated at Posted at 2021-03-19

はじめに

SDFの解析でエラーになった際に、どのデータがおかしいのか解析したいときがある。そういった場合、SDFを適当に切り出してみて、トライアンドエラーをすることが、ごくまれに(数年に1回)ある。今回、そのタイミングが来たのでツールを作って残すこととした。

仕様

  • 何番目から何番目を取得するかをstartとendを指定すると、その間にあるデータを切り出し、別のsdfとして出力する。
  • startを省略した場合は1, endを省略した場合は、sdfの一番最後を指定したものとする。
  • デバッグ目的で使用することが多いため、RDKitなどインストールが面倒なツールは使わない。

できたソース

こんな感じ。使い方はソースを見れば一目瞭然なので省略。

sdf_cutter.py
import argparse

def main():

    parser = argparse.ArgumentParser()
    parser.add_argument("-input", type=str, required=True)
    parser.add_argument("-output", type=str, required=True)
    parser.add_argument("-start", type=int, default=1)
    parser.add_argument("-end", type=int, default=None)
    args = parser.parse_args()

    buf = ""
    cnt = 0

    with open(args.input, "r", encoding="utf8") as fr:
        fw = open(args.output, "w", encoding="utf8")
        line = fr.readline()
        while line:
            line = line.rstrip()
            if line == "$$$$":
                cnt += 1
                if cnt >= args.start and (not args.end or cnt <= args.end):
                    fw.write(buf)
                    fw.write("$$$$\n")
                buf = ""
            else:
                buf += line + "\n"
            line = fr.readline()
        fw.close()


if __name__ == "__main__":
    main()

おわりに

  • scikit-learnのtrain_test_splitのSDF版を作っても面白いかも。需要はなさそうだけど...
0
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
0
1