はじめに
今更な内容ではあるが、タイトルの通り。
pathlib も同じようなことができるが、python3.7以降(?)は結果をlenでチェックできなかったり、listでキャストすると内容が消えたり(?)して使い勝手が悪い。
環境
- windows10 pro
- wsl2(20.04.5 LTS (Focal Fossa))
- Dockerのバージョン
- Docker version 20.10.18, build b40c2f6
- docker-compose version 1.29.2, build 5becea4c
※Docker Desktop ではありません
- python 3.10.7
(対象パターンを取得する)フォルダ構成
/tmp
├ abc
│ ├ temp1.txt
│ └ temp2.txt
├ def
│ └ temp4.txt
├ ghij
│ └ sample2.txt
├ klm
│ └ sample3.txt
├ nop
│ └ sample4.txt
├ temp3.txt
├ sample.txt
└ sample1.txt
目的
- 特定のフォルダ(今回は上記の
/tmp
)からファイル名sample
を含むテキストファイルを取得したい
コード
import glob
# パターンを取得
files = glob.glob("/tmp/**/sample*.txt", recursive=True)
# 出力(1つ以上取得できているかのチェック)
if len(files) > 0:
# ループ処理
for file in files:
# 単一のパスに対しての処理
print(file)
出力結果
/tmp/sample.txt
/tmp/sample1.txt
/tmp/nop/sample4.txt
/tmp/klm/sample3.txt
/tmp/ghij/sample2.txt
ちなみに
recursive
(再帰設定)なしで実行すると /tmp
直下のフォルダは対象外になる
files = glob.glob("/tmp/**/sample*.txt")
/tmp/nop/sample4.txt
/tmp/klm/sample3.txt
/tmp/ghij/sample2.txt
以下でも結果は同じ
files = glob.glob("/tmp/*/sample*.txt")
files = glob.glob("/tmp/*/sample*.txt" recursive=True)
※ **
に意味が出てくる認識でよいかと
最後に
?
とか[X-X]
とかのパターン表現もあるが、やり始めるときりがないので省略…