import os from fnmatch import fnmatch def glob(pattern, recursive = True): result = [] dirname, pattern = os.path.split(pattern) for path, dirs, files in os.walk(dirname): result.extend(os.path.join(path, f) for f in files if fnmatch(f, pattern)) if not recursive: del dirs[:] return result
glob.glob(u”ほげ/*”) みたく、ユニコードを渡してますか?
パターンでないパスの部分に ’¥[.*?¥]’ が含まれているのが原因でした。
エスケープ処理できればいいのですが、’[’ は多くのファイルシステムでファイル名として使用できる文字なので判別するのは難しそうですね。
globbing はファイルシステムとの親和性が高いのがメリットだと思っていたのですがこれはどう考えるべきか。
あと調べたら glob.iglob は os.path.split()[0] でもパターンを処理するので上の関数は代替にすらなりません。