LoginSignup
0
0

More than 5 years have passed since last update.

glob.globにおけるbad character range * at position * の解決方法

Last updated at Posted at 2019-04-01

問題のコード

とあるディレクトリ直下のファイルをマッチングしたい場合、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 形式のパス名のパターン展開

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0