スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
はじめての Python
お久しぶりです。
実は先日まで1週間ほどイタリアに行って参りました。

建造物を中心に芸術的なものばかりを目に入れることができて
クリエイターとしても色々と刺激になったのですが
細かい話はまた機会があれば。

ところで、4人で旅行をして全員がデジカメで写真をパシャパシャと撮っていて、
旅行が終わってから仲間が撮った写真も欲しかったのでデータをコピーして貰いました。

すると、撮影者別に見ることは当然できますが
全てをまとめて時間軸にソーティングしないと見難いんですよね。

当然、Windows のエクスプローラー
(余談ですがなぜかwin7からは『エクスプローラ』ではない)の
『詳細』表示モードで作成時間順にソートすれば済むのですが、
ファイル名が揃っていないと見栄えが悪いし毎回それをするのも少し面倒です。

秀丸エディタなど、更新日時順にファイル名をつけなおしてくれるソフトウェアは
おそらく沢山あるんだと思いますが
この際だから勉強のためにも自分で作ってみました。

最初は Perl で書こうとも思ったのですが、
折角なので後学のためにもついに Python を使って書いてみることにしました。

できたものがこちらです。

import os;
import datetime;

def renameFilesToDate(dirPath, baseName, hourOffset):
fileList = os.listdir(dirPath);
i = 0;
for fileName in fileList:
filePath = dirPath + fileName;
withoutExt,ext = os.path.splitext(filePath);
cr8time = time.localtime(os.path.getmtime(filePath));
year,month,day,hour=offsetHour(cr8time[0],cr8time[1],cr8time[2],cr8time[3],hourOffset);
year = str(year);
month = paddingTo2(month);
day = paddingTo2(day);
hour = paddingTo2(hour);
min = paddingTo2(cr8time[4]);
while True:
stri = paddingTo2(i);
newFilePath=(dirPath+baseName+year+month+day+hour+min+"_"+stri+ext);
if os.path.isfile(newFilePath) == 1:
i += 1;
else:
break;
i = 0;
os.rename(filePath, newFilePath);
print "renamed " + filePath + " to " + newFilePath;

def paddingTo2(num):
if len(str(num)) == 1:
num = "0" + str(num);
else:
num = str(num);
return num;

def offsetHour(year, month, day, hour, offset):
fulldate = datetime.datetime(year, month, day, hour) + datetime.timedelta(hours=offset);
year = fulldate.year;
month = fulldate.month;
day = fulldate.day;
hour = fulldate.hour;
return year, month, day, hour;

renameFilesToDate("D:/My Documents/My Picture/Italy/", "img", 0);

タイトルのとおり、初めての Python です。

こんなに短いコードですが、数時間ずっと集中しっぱなしで
やっとそれなりに実行できるものが出来上がりました。
デバッグ周りなど細かいところは一切手をつけていませんが。

ちなみに、友人の1人がカメラの設定を現地時間に設定して撮っていたので
ちゃんとその分の引数を作って時差の分だけずらすことをできるようにしています。

0218.png

このような感じで、ベースの名前の後に年月日時分までを入れ、その後は秒ではなく
重複しないよう0から数字を入れています。
携帯電話で撮る写真はデフォルトでこんな設定になっていることが多いのではないでしょうか。

正直言って、とても大変でした。。
私は基本的に普段 MEL しか書かなく、今までも C や Java などをほんの少しかじったことしかないので
Python はあまりに取っ付き難かったです。
普通に if 文や for 文を書こうとしても私の知っている言語達とは記述方法が全く違うし
そもそも型宣言が無いせいで数値の連結とかいろいろ分かり難いし
オブジェクト指向スクリプト言語なので目当てのクラスや関数を探し出すのに
かなり時間がかかり、その使い方を知るにも試行錯誤の連続でした。

様々な言語を操ってる人って混乱しないんでしょうか。。
素直に尊敬するしかないです。

でも慣れていけば確かにかなり幅が広がりそうなので
徐々に Maya 上で MEL ではなく Python でもどんどんツールなど作っていこうかなと思っています。
コメント
おおお。
初めてでこんなに長いのを。すごい。
リグをやられる方なら将来的にモーションビルダーとかでPythonを使うことがあるかもしれませんね。
2011.03.05 23:46 | URL | E.Y | 編集
>>E.Yさん
コメントありがとうございます!
なるほど、モーションビルダーなども Python でスクリプトが書けるのですね。
確かに Maya 以外のソフトのツールも作ってみたいと思っているので、もっと勉強して精進しようと思います。
2011.03.09 15:56 | URL | らい | 編集
管理者のみ閲覧可能にする
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code