今回は、Python の glob モジュールを使用してファイルやディレクトリを検索するときに、特殊文字(例:*、?、[、]
など)が含まれている場合は、想定した検索ができないことがあります。特殊文字をエスケープして検索する方法を紹介していきます。
検証環境
検証に使用した環境/ライブラリを次に記載します。
- Python
- 3.8.10
特殊文字
glob モジュールでは、次の文字などが特殊文字として認識されます。
特殊文字 | 意味 |
---|---|
* | 任意の文字列に一致する |
? | 任意の1文字に一致する |
[] | 指定した範囲や文字セットに一致する |
実装例
実装例は、次のようなファイル構成での説明となります。ファイル名が「[3].txt」を取得するための実装例になります。
1.txt
2.txt
[3].txt
取得できない実装例
取得できない実装例になります。
import glob
path = "[3].txt"
files = glob.glob(path)
print(files)
実行結果は、次のようになります。取得対象のファイルが取得できていないことがわかります。
[]
取得できる実装例
取得できるように実装例は、次のようになります。変更箇所は「path = "[3].txt"」に glob.escape を使用するように変更しています。
import glob
# glob.escape を使用するように修正
path = glob.escape("[3].txt")
files = glob.glob(path)
print(files)
実行結果は、次のようになります。取得対象のアイルが取得できていることがわかります。
['[3].txt']
glob.escape は、「[]」のような特殊記号をそのままの文字として扱えるように変換するため、ファイルを取得することができるようになります。
まとめ
glob.escape を使用することで、特殊文字が含まれているファイルを取得できる方法を紹介しました。ただし、Python のバージョンが 3.4 以降に追加された機能のため注意してください。