JP / EN

広告

Python globのrecursiveオプションで再帰的にファイルを列挙

タグ:Python

Globは正規表現などによる柔軟なファイル列挙機能を提供するパッケージだ。 ファイル列挙は再帰的に(ディレクトリを見つけたらそのそれぞれの中を再検索するようなやり方で) 列挙していきたいことが良くある。 正規表現だとそのような再帰パターンを書くのは(可能ではあるのだが)ちょっと億劫である。 そのようなときは
  • globにrecursive=Trueを渡す
  • 任意の数のディレクトリを**/で書く
のようにしてワイルドカード的に再帰処理を書くことができ、私のような正規表現苦手勢からするとお手軽である。
    # ディレクトリ構造
    #$ tree dir
    #dir
    #├── a.txt
    #├── b.txt
    #└── subdir
    #    ├── c.txt
    #    └── subsubdir
    #        └── d.txt
    In [1]: import glob

    In [2]: glob.glob("dir")
    Out[2]: ['dir']

    In [5]: glob.glob("dir/*")
    Out[5]: ['dir\\a.txt', 'dir\\b.txt', 'dir\\subdir']

    In [3]: glob.glob("dir/**", recursive=True)
    Out[3]:
    ['dir\\',
    'dir\\a.txt',
    'dir\\b.txt',
    'dir\\subdir',
    'dir\\subdir\\c.txt',
    'dir\\subdir\\subsubdir',
    'dir\\subdir\\subsubdir\\d.txt']

    # recursiveがないと**は*と同じ
    In [4]: glob.glob("dir/**")
    Out[4]: ['dir\\a.txt', 'dir\\b.txt', 'dir\\subdir']
  
なおたまに glob() got an unexpected keyword argument 'recursive' というエラーが出て困ることがある。これはPython2系や、3.5以前の古いPython3のglobにはrecursiveオプションがなかったために出るエラーである。 知らないうちにpython2にpythonコマンドが切り替わっていないか、また普段からpython2を使っている人は このためにpython3を使うか、recursiveをあきらめるかしよう。

おすすめ記事

FlaskでWebサーバを立てるサンプル~最小限のコードで

Python サブディレクトリ内のスクリプトからのインポート



このエントリーをはてなブックマークに追加

https://wonderhorn.net/