CRI ADX2(AtomCraft)
ロボット編16 CSVを使った未登録キューのチェック
「CSVを使ったキューシートの作成」チュートリアルでは、CSVの情報から波形の登録、キューシート、キューの作成を行いました。
このチュートリアルでは、「CSVを使ったキューシートの作成」チュートリアルで使用したCSVファイルを使って、CRI Atom Craft上に作成されたキューシートにCSVファイルに記述されているキュー名と一致するキューが含まれているかチェックをするスクリプトを作成します。
本チュートリアルは、チュートリアル「CSVを使ったキューシートの作成」を実行したプロジェクトを使用します。
プロジェクトを開いていない場合は、プロジェクトを開くか、「CSVを使ったキューシートの作成」にて作成したスクリプトを実行してから、チュートリアルを進めましょう。
スクリプトファイルの準備
スクリプトメニューで「スクリプトリスト...」を選択し、スクリプトリストからのスクリプト実行ウィンドウ表示します。
スクリプトリストウィンドウの新規作成ボタンを押して、以下の名前でスクリプトファイルを作成しましょう。
スクリプトの保存先 | スクリプトファイル名 |
---|---|
tutorials [CRI] | tutorial07-2_check_cuesheet_from_csv.py |
スクリプトの説明
作成したスクリプトをダブルクリックして、スクリプトエディターからのスクリプト実行で開きます。
スクリプトリストからのスクリプト実行ウィンドウでスクリプトの内容が一覧できるように、スクリプトの説明を次のように記述しましょう
# --Description:[チュートリアル]CSV を使った未登録キューのチェック
モジュールのインポート
スクリプトの説明が記述できたら、スクリプトでCRI Atom Craftを操作するため、次のモジュールをインポートします。
import sys import os import csv import cri.atomcraft.debug as acdebug import cri.atomcraft.project as acproject
「CSVを使ったキューシートの作成」チュートリアルと同じように、CSVファイルを使用するため、Pythonの標準ライブラリのcsvモジュールをインポートします。
プロジェクト操作のために Projectモジュール 、ログ出力のためにDebugモジュールをインポートします。
CSVファイルのパスの設定
チェックに使用するCSVファイルのパス変数を設定します。
CSVファイルのパス変数の設定をスクリプトで記述すると次のようになります。
# チェックする CSV ファイルのパス csv_path = os.path.dirname(os.path.dirname(__file__)) + '/tutorial_data/tutorial_data03/tutorial_data3.csv' # CSV ファイルが存在するかチェック if os.path.isfile(csv_path) == False: acdebug.warning("CSV ファイルが見つかりません: " + csv_path) sys.exit()
ファイルが存在しない場合、スクリプトを中断できるように、os.path.isfile関数でファイルが存在するかの確認をしています。
チェックするキューリストとキュー名の列挙
次の関数を使って、CSV ファイルを読み込み、チェックに使用する情報を取得します。
関数名 | 説明 |
---|---|
get_workunit | ワークユニットを取得します |
get_cuesheet_rootfolder | ワークユニットのキューシート ルートフォルダーを取得します |
get_child_object | 親オブジェクトを指定して、子オブジェクトを取得します |
find_objects | 再帰検索を行い一致したオブジェクトをリスト形式で取得します |
get_value | 指定したオブジェクトのパラメーターを取得します |
一致するキュー名があるかのチェックを行うため、キューシートに登録されているキューリストを取得し、キュー名情報を取得します。
これらの処理をスクリプトで記述すると次のようになります。
# ----- 登録キュー名を列挙する ----- registered_cue_name_list = [] # ワークユニットを取得 workunit = acproject.get_workunit("WorkUnit_Tutorial")["data"] # キューシートルートフォルダを取得 cuesheet_rootfolder = acproject.get_cuesheet_rootfolder(workunit)["data"] # 拡張子を除いた CSV ファイル名からキューシート名を取得して、キューシートを取得 cuesheet_name = os.path.splitext(os.path.basename(csv_path))[0] cuesheet = acproject.get_child_object(cuesheet_rootfolder, "CueSheet", cuesheet_name)["data"] # キューシートに登録されたキューリストを取得 cues = acproject.find_objects(cuesheet, "Cue")["data"] # ----- 登録キュー名リストを作る ----- acdebug.log("tutorial_data3.csv からキュー情報を収集しています...") for cue in cues: # キュー名を取得します cue_name = acproject.get_value(cue, "Name")["data"] # キュー名を登録キュー名リストに追加します registered_cue_name_list.append(cue_name)
キューシート内のキュー名とCSVのキュー名を比較
CSV からチェックに使用する「キュー名」情報を取得します。
「チェックするキューリストとキュー名の列挙」で作成したキュー名リストに CSV から取得したキュー名情報が含まれているかを確認します。
キューシートに作成されていないキューがあれば、キュー名をスクリプトログに表示します。
これらの処理をスクリプトで記述すると次のようになります。
# CSVを開いてキューシートのキューをチェック acdebug.log("tutorial_data3.csv を使ってキューのチェックを行います...") unregistered_cue_name_list = [] with open(csv_path) as f: reader = csv.reader(f) for row in reader: # CSVのキュー名列を取得 cue_name = row[1] # 登録キューリストに CSV 側のキュー名が存在するかチェックする is_find = False for registered_cue_name in registered_cue_name_list: if registered_cue_name == cue_name: # キューが見つかった is_find = True if is_find == False: unregistered_cue_name_list.append(cue_name) # チェック if len(unregistered_cue_name_list) > 0: acdebug.warning(cuesheet_name + "に未登録キューがあります") for cue_name in unregistered_cue_name_list: acdebug.warning("Cue " + cue_name + "がみつかりません。") else: acdebug.log("チェックシートと違いはありません。") acdebug.log("[チュートリアル]CSV を使った未登録キューのチェック が完了しました。")
スクリプトの保存と実行
これで本チュートリアルのスクリプト記述は終了です。
スクリプトを保存し、実行しましょう。
スクリプトが正常に実行されると、CSV情報に含まれていないキュー名が見つかった場合、ログに存在しないキュー名一覧を出力します。
CRI Atom Craftを直接操作して、キューの追加、削除やキューの名前を変更したりすると、一致しないキューのログ内容が変わります。