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

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

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

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

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

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

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

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

この記事を書いた人

システムエンジニアとして10年勤務→フリーランスへ。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

目次