tkFileDialogで複数ファイル選択
tkFileDialog.openfilenamesで複数ファイル選択をした際、Pythonなんだから当然リストで返ってくるものだと思ったら、スペース区切りの単一文字列を返された。
tclの文法を引きずってるみたいで、要素中にスペースが含まれると"{}"で囲われる。しかしながら"{}"のエスケープとかしないみたいでファイル名が"hogehoge {hoge hoge"でも"{hogehoge {hoge hoge}"としてくるので単純に処理できない。
でラッパを作ってみた。
def askopenfilenames(*args, **kargs): """tkFileDialog.askopenfilenamesのラッパ ファイル名のリストを返す""" tmp = tkFileDialog.askopenfilenames(*args, **kargs) ret = [] buf = "" for fn in tmp.split(): if buf: buf += " " + fn if fn[-1] == '}': try: st = os.stat(buf[:-1]) #ファイルの存在確認 if st: ret.append(buf[:-1]) buf="" except: pass elif fn[0] == '{': buf = fn[1:] else: ret.append(fn) return ret
書いてから、splitでちまちま分割しなくとも正規表現でいけたんじゃと気づいたが直すのも面倒なのでこれでよしとする。