CSVで指定されたパラメータセットに応じてコードを自動生成するスクリプト。
パラメータの取得はPython標準CSVパーサを利用。コード生成はヒアドキュメントに変数を埋め込むことで実現している。
#! /usr/bin/env python import sys import csv #----------------------------------------- # Load config.csv #----------------------------------------- args = sys.argv with open(args[1]) as f: for row in csv.reader(f): if not row[0].startswith('#'): config = row __P0 = int(config[0].replace(' ', '')) __P1 = int(config[1].replace(' ', '')) __P2 = int(config[2].replace(' ', '')) #----------------------------------------- # Generate param.h #----------------------------------------- str=''' #pragma once #define PARAM0 {__p0} #define PARAM1 {__p1} #define PARAM2 {__p2} const float A[PARAM0 * PARAM1] = {{ #include "./data/{__p0}_{__p1}.csv" }} const float B[PARAM1 * PARAM2] = {{ #include "./data/{__p1}_{__p2}.csv" }} float Y[PARAM0 * PARAM2]; '''.format(__p0=str(__P0), __p1=str(__P1), __p2=str(__P2)).strip() print(str)
パラメータ設定ファイル例
# p0, p1, p2 5, 3, 4
Pythonのヒアドキュメントは'''と'''で囲んで作成する。
上記の記述例では、開始の'''の直後と、終了の'''の直前に改行が挿入されるため、stripにて前後の改行を取り除く。
ヒアドキュメント内の変数展開はformatメソッドを使用する。ヒアドキュメント内で{変数名}として展開する変数を記述する。なお、本来の{および}は変数と区別するため、{{、}}と書き換える。