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に記載されたキューが既に登録されているかどうかをチェックする
if not cue_name in registered_cue_name_list:
# 登録されていない
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 を直接操作して、キューの追加、削除やキューの名前を変更したりすると、一致しないキューのログ内容が変わります。