glob.glob()でつまずいたので、メモ。
現象
glob.glob() だと、[ ]を含むパスが取得できない。
例
glob.glob(r"d:\test\[1].*")
#=> [1].txt にマッチしない
glob.glob(r"d:\test\\[1\].*") # \[ \] と書いてもダメ
解決方法
- パスマスクを以下のようにエスケープする
[ -> [[]
] -> []]
glob.glob(r"d:\test\[[]1[]].*")
#=> [1].txt にマッチする
glob.glob() の代わりに以下の関数を使うもよし。
def escapeBraceForGlob(str):
'''
convert [ -> [[] , ] -> []]
'''
newStr = str.replace("[","\\[").replace("]","\\]")
newStr = newStr.replace("\\[","[[]").replace("\\]","[]]")
return newStr
def globEscapeBraces(pathname):
'''
glob.glob() after escaping "[" and "]".
'''
return glob.glob(escapeBraceForGlob(pathname))
- os.listdir() を使う。ただし、サブディレクトリのファイルまで列挙するので注意