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

“Python の glob.glob に日本語突っ込むと何も返してこない件” への3件のフィードバック

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

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

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

コメントを残す

メールアドレスが公開されることはありません。