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

Pythonでファイル名、ディレクトリ名(フォルダ名)の一覧を取得するにはosモジュールの関数os.listdir()を使います。

os.listdir(path='.')

pathで指定されたディレクトリ内のエントリ名が入ったリストを返します。

osモジュールは標準ライブラリに含まれているのでインストールは不要(importは必要)。 ここでは以下の内容について説明します。

  • ファイル名とディレクトリ名の両方の一覧を取得
  • ファイル名のみの一覧を取得
  • ディレクトリ名のみの一覧を取得

以下のようなファイル(ディレクトリ)構造を例とします。

.
└── testdir
    ├── dir1
    ├── dir2
    ├── file1
    ├── file2.txt
    └── file3.jpg

なお、os.listdir()のほかに、globモジュールを使ってファイル名、ディレクトリ名(フォルダ名)の一覧を取得する方法もあります。globではワイルドカード*などを使った条件指定やサブディレクトリを含めた再帰的な処理ができます。詳細は正規表現を使う例も示しています。

また、Python3.4以降ではパスをオブジェクトとして操作できるpathlibモジュールを使ってファイルやディレクトリの一覧を取得することもできます。上述のglobと同様に条件指定や再帰的な処理もできます。

ファイル名とディレクトリ名の両方の一覧を取得

os.listdir()をそのまま使うと、ファイル名とディレクトリ名の両方のリストが返ってきます。

import os

path = "./testdir"

files = os.listdir(path)
print(type(files))  # <class 'list'>
print(files)        # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']

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

ファイル名のみの一覧を取得したい場合は、path がファイルかどうかを判定するos.path.isfile()とリスト内包表記を使います。os.path.isfile()にファイル名だけ渡すとうまくいかないので、以下のようにos.path.isfile(os.path.join(path, f))としてフルパスにして渡します。

files = os.listdir(path)
files_file = [f for f in files if os.path.isfile(os.path.join(path, f))]
print(files_file)   # ['file1', 'file2.txt', 'file3.jpg']

ディレクトリ名のみの一覧を取得

ディレクトリ名のみの一覧を取得したい場合は、同じように、os.path.isdir()を使います。

files = os.listdir(path)
files_dir = [f for f in files if os.path.isdir(os.path.join(path, f))]
print(files_dir)    # ['dir1', 'dir2']
Last Updated: 6/26/2019, 10:34:03 PM