Published On: 1970-01-01|Last Updated: 1970-01-01|Categories: Uncategorized|
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

コメント

3 Comments

  1. 通りすがり 2007-08-22 at 22:45 - Reply

    glob.glob(u”ほげ/*”) みたく、ユニコードを渡してますか?

  2. chrono-meter 2007-08-23 at 07:49 - Reply

    パターンでないパスの部分に ’¥[.*?¥]’ が含まれているのが原因でした。
    エスケープ処理できればいいのですが、’[’ は多くのファイルシステムでファイル名として使用できる文字なので判別するのは難しそうですね。
    globbing はファイルシステムとの親和性が高いのがメリットだと思っていたのですがこれはどう考えるべきか。

  3. chrono-meter 2007-08-23 at 07:51 - Reply

    あと調べたら glob.iglob は os.path.split()[0] でもパターンを処理するので上の関数は代替にすらなりません。

関連