Python の glob.glob に日本語突っ込むと何も返してこない件

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件のコメント

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

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

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

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です