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

Modified: | Tags: Python, ファイル処理

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

globモジュールやpathlibモジュールを使ってファイル名・ディレクトリ名(フォルダ名)の一覧を取得する方法もある。ワイルドカード*などを使った条件指定やサブディレクトリを含めた再帰的な抽出が可能。

以下のファイル・ディレクトリ構造を例とする。

temp/
├── dir1/
│   └── file_in_dir
├── dir2/
├── file1
├── file2.txt
└── file3.jpg

ファイル名とディレクトリ名の両方の一覧を取得: os.listdir()

os.listdir()にディレクトリのパス(パス文字列やpathlib.Pathなどのpath-like object)を指定すると、そのディレクトリ内のファイル名・ディレクトリ名のリストが返される。

パス文字列で指定する場合、ディレクトリの末尾の区切り文字(/)はあってもなくてもよい。

import os

dir_path = "temp"

files = os.listdir(dir_path)
print(files)
# ['file2.txt', 'dir2', 'file3.jpg', 'file1', 'dir1']

print(type(files))
# <class 'list'>

引数を省略した場合、カレントディレクトリ内のファイル名・ディレクトリ名のリストが返される。

サブディレクトリ内のファイル・ディレクトリは含まれない。再帰的に一覧を取得するにはglobモジュールを使う。

リストの順番は不定。ソートしたい場合はsorted()sort()を使う。

print(sorted(files))
# ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']

文字列のリストから条件を満たす要素を抽出する方法については以下の記事を参照。特定の文字列を含むパスのみを抽出したりできる。

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

ファイル名のみの一覧を取得するには、パスがファイルか判定するos.path.isfile()をリスト内包表記で用いる。os.path.isfile()にファイル名だけ渡すとうまくいかないので、os.path.join()でディレクトリ名と結合して渡す。

import os

dir_path = "temp"

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

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

ディレクトリ名のみの一覧を取得する場合も、考え方は前項のファイルの場合と同じ。パスがディレクトリか判定するos.path.isdir()を使う。

import os

dir_path = "temp"

files_dir = [
    f for f in os.listdir(dir_path) if os.path.isdir(os.path.join(dir_path, f))
]
print(files_dir)
# ['dir2', 'dir1']

関連カテゴリー

関連記事