2014/11/17

【Python】 ファイルパス操作を助けてくれる Lucidity モジュール

作業場所、パブリッシュ場所、バックアップ場所、資料置き場……プロジェクトにはさまざまな意味を持ったファイルパスが混在します。

 Lucidity というモジュールは、これら氾濫するファイルパスの扱いを助けてくれるモジュールです。

これ、cliqueモジュール(連番ファイル名の解釈を助けてくれる)と組み合わせたら便利そうです。
(と思ったら 同じ開発者さんで。なるほど)



Lucidity 1.3.1 : Python Package Index
https://pypi.python.org/pypi/Lucidity

Github:
https://github.com/4degrees/lucidity

チュートリアル:
http://lucidity.readthedocs.org/en/latest/


Lucidityでは、抽象化して名前をつけたpathを「テンプレート」という概念で扱います。
たとえばこういう感じに、

workTmplString = '/A_drive/project_X/{asset_code}/{lod}/{ver}/{asset_code}_{lod}_v{ver}.{ext}'
publishTmplString = '/B_drive/project_X/{asset_code}/{lod}_v{ver}.{ext}'

パスの変動しそうな箇所を { } で囲んだ文字列(パターン)を用意しておきます。文字列フォーマットと同じ書き方です。
ここでは、作業場所とパブリッシュ場所でドライブが違うんだよ的な運用をイメージしてみました。
これをもとに、Templateオブジェクトを取得します。

work_template = lucidity.Template('asset_work', workTmplString)
publish_template = lucidity.Template('asset_publish', publishTmplString)


Templateオブジェクトには、二つの主要メソッドがあるようです。

(template).parse(path)
# path を与えると、テンプレートの抽象化されている箇所の内容を辞書で返す

(template).format(dict)
# 辞書を与えると、それをテンプレートに当てはめてpathを作成して返す

この二つを使って、「作業してるシーンファイルの、パブリッシュ先はどこ?」を求めてみます。

work_path = '/A_drive/project_X/Dog/high/001/Dog_high_v001.ma'

data = work_template.parse(path)
publish_path = publish_template.format(data)

print publish_path # -> /B_drive/project_X/Dog/high_v001.ma



また、.keys() でテンプレートにどういう要素があるかが返ってくるので、
あるテンプレートとテンプレートが交換可能か確認できます。

work_template.keys() == publish_template.keys()
# Result: True #

目的用途ごと/ツールごと/ファイルタイプ...などごとにテンプレートを用意しておけば、ファイルのやり取りに関するコードを簡素化できそうです。

あとは、たくさんテンプレート作ったら、その管理をどうしようか……
jsonとかyamlとか、その辺にして置いとくのがベターでしょうか(^^;;;

ここに挙げた内容なら自力で出来そうではありますが、
チュートリアルにはほかにも機能が紹介されていますので、
気になる方はぜひそちらもご確認を。



■ 関連

過去記事 - クリークモジュールについて
http://sproutmel.blogspot.jp/2014/06/python.html

過去記事 - 文字列フォーマットについて
http://sproutmel.blogspot.com/2014/04/python.html



0 件のコメント:

コメントを投稿