0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

python で glob を使って特定パターンのパスを取得したい

Last updated at Posted at 2022-12-11

はじめに

今更な内容ではあるが、タイトルの通り。
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]とかのパターン表現もあるが、やり始めるときりがないので省略…

0
0
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?