2017/02/28
Python でディレクトリ内のファイル一覧を取得する方法3種
微妙に動作が違ってすぐ迷うので備忘録1。
例として、こんなディレクトリ構造を使用します。
. └── dir ├── a.txt ├── b.txt ├── c.jpg └── subdir ├── d.yaml └── e.conf |
単純にリストで取得
最もシンプルな方法。結果はファイル名のみ。
1 2 3 4 5 6 7 | >>> for file in os.listdir( "dir" ): ... print ( file ) ... subdir a.txt b.txt c.jpg |
以下のようにサブディレクトリを指定した場合でも結果はファイル名のみなので、その後の処理2はパスの補完が必要になることが多いです。
1 2 3 4 5 | >>> for file in os.listdir(os.path.join( "dir" , "subdir" )): ... print ( file ) ... d.yaml e.conf |
ワイルドカードを使う
拡張子でフィルタする等、ワイルドカードを使用したい場合は glob.glob()
を使うと便利です。結果は指定したパスを含みます。
1 2 3 4 5 | >>> for file in glob.glob(os.path.join( "dir" , "*.txt" )): ... print ( file ) ... dir / a.txt dir / b.txt |
再帰的にサブディレクトリまで探索
サブディレクトリまで全部取得したい場合は os.walk()
が使えます。
1 2 3 4 5 6 7 8 9 10 | >>> for root, dirs, files in os.walk( "dir" ): ... print ( "{0}\n {1} (dirs)\n {2} (files)\n" . format (root, dirs, files)) ... dir [ 'subdir' ] (dirs) [ 'a.txt' , 'b.txt' , 'c.jpg' ] (files) dir / subdir [] (dirs) [ 'd.yaml' , 'e.conf' ] (files) |
os.walk()
はタプルのリストを返します。
少々扱いづらいので、単純な処理の場合は関数化してしまうと楽かもしれません。
参考
0 件のコメント:
コメントを投稿