note.nkmk.me

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

Date: 2016-12-08 / Modified: 2017-01-25 / tags: Python, ファイル操作

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

os.listdir(path='.')
path で指定されたディレクトリ内のエントリ名が入ったリストを返します。
16.1. os — 雑多なオペレーティングシステムインタフェース — Python 3.5.2 ドキュメント

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']
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事