【python入門】os.listdirでファイル・ディレクトリの一覧を取得

よくファイルやディレクトリを操作するときに、以下のようなことが知りたい場合もあります。

指定したディレクトリの中身を一覧で取得したい
特定の拡張子のファイルを取得したい

そこで、この記事ではファイルの一覧を取得できるos.listdir関数の使い方や、指定した拡張子のファイルを取得する方法などについて解説していきます。

  • 【基礎】osモジュールとは
  • 【基礎】listdir関数でファイル・ディレクトリの一覧を取得する方法
  • 【基礎】listdir関数でファイルのみ一覧を取得する方法
  • 【基礎】listdir関数でディレクトリのみ一覧を取得する方法
  • 【発展】拡張子を指定して一覧を取得する方法

ファイル操作を行う上で、このような機能はよく使いますので使い方についてはしっかりと理解しておきましょう。

osモジュールとは

osモジュールはOSに依存しているさまざまな機能を利用できるモジュールで、主にファイルやパスの操作が可能です。osモジュールを使用する場合は、Pythonのプログラムの先頭でosモジュールをインポートする必要があります。

import os

ここではそんなosモジュールで、ファイルやディレクトリの一覧を取得できるlistdir関数について解説していきます。

os.listdirの使い方

ファイル・ディレクトリの一覧を取得

指定したファイル・ディレクトリの一覧を確認するためには、listdir関数の引数に取得したいディレクトリのパスを指定します。ここでは以下のようなディレクトリ構造の一覧を取得します。

└── dir
    ├── sample1.txt
    ├── sample2.txt
    ├── sample3.txt
    ├── subdir1
    └── subdir2

サンプルプログラム:

import os

path = './dir'

list1 = os.listdir(path)
print(list1)

実行結果:

['subdir2', 'Untitled.ipynb', 'test2.csv', 'subdir1', 'test1.csv', '.ipynb_checkpoints', 'sample1.txt', 'sample2.txt', 'sample3.txt']

このようにリストに指定したディレクトリのファイル・ディレクトリの一覧を取得することができました!

ファイルのみの一覧を取得

listdir関数を使用すると、ファイル・ディレクトリの一覧が取得できて便利ですが、場合によってはファイルのみ、ディレクトリのみの一覧を取得したい場合もあります。

たとえば取得したリストからファイルのみを抽出したい場合は、path.isfile関数を使用してファイルかどうか判定する必要があります。

以下のサンプルを御覧ください。サンプルプログラム:

import os
 
path = './dir'

filelist = []

for f in os.listdir(path):
  if os.path.isfile(os.path.join(path, f)):
    filelist.append(f)

print(filelist)

実行結果:

['test2.csv', 'test1.csv', 'sample1.txt', 'sample2.txt', 'sample3.txt']

このようにファイルのみ取得することができました!このプログラムではfor文でlistdirで取得したパスを、それぞれファイルかどうか判定し、ファイルだったらリストfilelistに格納しています。

ディレクトリのみ取得する

listdir関数でディレクトリのみ取得したい場合は、ファイルのみ取得した場合と同じようにpath.isfileの箇所をディレクトリかどうか判定するpath.isdir関数に置き換えます。

サンプルプログラム:

import os
 
path = './dir'

filelist = []

for f in os.listdir(path):
  if os.path.isdir(os.path.join(path, f)):
    filelist.append(f)

print(filelist)

実行結果:

['subdir2', 'subdir1']

このようにディレクトリのみ取得することができました!

拡張子を指定して取得したい場合

ファイルを取得時に、たとえば拡張子が.txtのファイルのみ取得したいなんて場合もありえます。そんなときはglobモジュールのglob関数を使用すると便利です。

globモジュールはファイルやディレクトリを操作するときに、正規表現やワイルドカードによるパターンマッチングが可能です。以下では拡張子が.txtのファイルを取得しています。

サンプルプログラム:

import glob

path = './dir/*.txt'

list1 = glob.glob(path);

print(list1)

実行結果:

['./dir/sample1.txt', './dir/sample2.txt', './dir/sample3.txt']

globについては、以下の記事でも詳しく解説しています。

まとめ

ここでは、ファイル・ディレクトリの一覧を取得するlistdirや拡張子を指定してファイルの一覧を取得するglobについて解説しました。

  • osモジュールとは
  • listdir関数でファイル・ディレクトリの一覧を取得する方法
  • listdir関数でファイルのみ一覧を取得する方法
  • listdir関数でディレクトリのみ一覧を取得する方法
  • 拡張子を指定して一覧を取得する方法

Pythonではファイル操作の関数はよく使われますので、使い方についてはしっかりと理解しておきましょう。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。