Pythonでファイル名・ディレクトリ名の一覧をリストで取得
Pythonでディレクトリ内(フォルダ内)のファイル名・ディレクトリ名(フォルダ名)の一覧を取得するには、osモジュールのos.listdir()
関数を使う。
globモジュールやpathlibモジュールを使ってファイル名・ディレクトリ名(フォルダ名)の一覧を取得する方法もある。ワイルドカード*
などを使った条件指定やサブディレクトリを含めた再帰的な抽出が可能。
以下のファイル・ディレクトリ構造を例とする。
temp/
├── dir1/
│ └── file_in_dir
├── dir2/
├── file1
├── file2.txt
└── file3.jpg
source: os_listdir.py
ファイル名とディレクトリ名の両方の一覧を取得: 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'>
source: os_listdir.py
引数を省略した場合、カレントディレクトリ内のファイル名・ディレクトリ名のリストが返される。
サブディレクトリ内のファイル・ディレクトリは含まれない。再帰的に一覧を取得するにはglobモジュールを使う。
リストの順番は不定。ソートしたい場合はsorted()
やsort()
を使う。
print(sorted(files))
# ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']
source: os_listdir.py
文字列のリストから条件を満たす要素を抽出する方法については以下の記事を参照。特定の文字列を含むパスのみを抽出したりできる。
ファイル名のみの一覧を取得
ファイル名のみの一覧を取得するには、パスがファイルか判定するos.path.isfile()
をリスト内包表記で用いる。os.path.isfile()
にファイル名だけ渡すとうまくいかないので、os.path.join()
でディレクトリ名と結合して渡す。
- 関連記事: Pythonリスト内包表記の使い方
- 関連記事: Pythonでファイル、ディレクトリ(フォルダ)の存在確認
- 関連記事: Pythonでパス文字列からファイル名・フォルダ名・拡張子を取得、結合
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']
source: os_listdir.py
ディレクトリ名のみの一覧を取得
ディレクトリ名のみの一覧を取得する場合も、考え方は前項のファイルの場合と同じ。パスがディレクトリか判定する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']
source: os_listdir.py