作業をしているとサブディレクトリを含む全てのファイル名を取得したい場合があると思います。
Pythonで特定のフォルダ(ディレクトリ)内にあるファイル名を一覧で取得したいときは、os
モジュールやglob
モジュール、pathlib
などを使うのが一般的です。本記事では、初心者の方でもわかりやすいように、それぞれの方法の使い方・違い・注意点を具体例付きで解説します。
この記事の対象
ファイル一覧を取得する主な3つの方法
方法 | 特徴 | Pythonバージョン |
---|---|---|
os.listdir() | 標準的で古くからある | すべて対応 |
glob.glob() | ワイルドカードで柔軟な検索が可能 | すべて対応 |
pathlib | オブジェクト指向で書きやすい | 3.4以降推奨 |
os.listdir() を使った基本例
import os
files = os.listdir('sample_dir')
print(files) # ファイル名とフォルダ名がリストで返る
ディレクトリ内の「ファイル」だけでなく「サブフォルダ」も含まれる点に注意。
glob.glob() を使った方法
import glob
files = glob.glob('sample_dir/*') # フルパスで取得
print(files)
*.txt
と指定すれば、特定の拡張子だけ取得できます。
pathlib を使う(Pythonicな書き方)
from pathlib import Path
p = Path('sample_dir')
files = [f.name for f in p.iterdir() if f.is_file()]
print(files)
拡張性が高く、オブジェクト指向で記述がきれいになります。
ファイルだけを抽出する(isfileの利用)
import os
files = [f for f in os.listdir('sample_dir') if os.path.isfile(os.path.join('sample_dir', f))]
print(files)
os.path.isfile()
を使うことでサブディレクトリを除外できます。
具体的な使用例
ファルダ内にあるexcelファル名を取得して出力しました。

globを用いた場合
カレントディレクトリのみ
import glob
#1---フォルダ内のxlsxファイルの一覧を取得
files = sorted(glob.glob('*.csv'))
print(files)
ファイルの一覧を取得するには「glob()」関数を用いることが簡単です。
「glob.glob(‘*.csv’)」として、フォルダ内の全てのcsvファイルを指定しています。「sorted()」関数では出力時、見やすいように並び替えをしています。
最後に出力です。
結果
['7731_2010.csv', '7731_2011.csv', '7731_2012.csv', '7731_2013.csv', '7731_2014.csv', '7731_2015.csv', '7731_2016.csv', '7731_2017.csv', '7731_2018.csv', '7731_2019.csv', '7731_2020.csv']
サブディレクトリを含む
import glob
for f in glob.glob("./**/*.*", recursive=True):
print(f)
サブディレクトリ内のファイル名を取得したい場合は、引数にpath(ワイルドカードを用いて)と「recursive」をTrueにする事で簡単に取得できます。
osを用いた場合
import os
#1---ファイルを検索するルートディレクトリのパス
root_dir = r'C:\hoge\hoge\src'
#2---ルートディレクトリ以下の全てのファイルを取得
for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
#3---ファイルパスを取得
file_path = os.path.join(dirpath, filename)
print(file_path)
上記のコードでは、os.walk()メソッドを使用して、指定されたルートディレクトリ以下の全てのファイルを再帰的に検索しています。
以下は解説になります。
#1---ファイルを検索するルートディレクトリのパス
root_dir = r'C:\hoge\hoge\src'
1の部分ではディレクトリを指定しています。
#2---ルートディレクトリ以下の全てのファイルを取得
for dirpath, dirnames, filenames in os.walk(root_dir):
2の部分ではos.walk()メソッドを用いてファイル名を取得しています。
#3---ファイルパスを取得
file_path = os.path.join(dirpath, filename)
print(file_path)
最後にファイルのpathを作成して出力しています。
まとめ:使い分けのポイント
状況 | 推奨手法 |
---|---|
とにかく一覧を取得したい | os.listdir() |
拡張子やパターンで絞りたい | glob.glob() |
直感的で拡張性の高いコードを書きたい | pathlib |
関連記事
ファイル名を取得したら、次はファイルの読み書き方法も学んでみましょう!