問題のコード
とあるディレクトリ直下のファイルをマッチングしたい場合、glob.globを使いますが、その際によく見るエラーがありましたのでこれを解消したいと思います。
sample.py
import glob
path = "D:\SAMPLE18\[201806] [HASK] [SAMPLE]"
files = glob.glob(os.path.join(path,"**"),recursive = True)
console
bad character range u-0 at position 10
解決方法
これはマッチングしたいパス内に特殊文字が含まれているため、マッチングできないといった旨のエラーです。
上記コードでは、"["が特殊文字であるため、マッチングに失敗しています。
ですので、パス内の特殊文字をエスケープします。
sample.py
import glob
path = "D:\SAMPLE18\[201806] [HASK] [SAMPLE]"
path = glob.escape(path)
files = glob.glob(os.path.join(path,"**"),recursive = True)
上記コードではマッチングが正常に完了します。
また、他にも'?' 、 '*'のような特殊文字がリテラル文字列に含まれている場合も同様のエラーを出力するため、特殊文字が含まれいている可能性のあるディレクトリをマッチングする際は、エスケープした方が良いと思います。
WindowsOSとその他では、若干動作が異なる場合があるため、下記リンクも参照してください。
python.org glob --- Unix 形式のパス名のパターン展開