Pythonで「ファイル一覧取得」をマスターしよう
Pythonで業務自動化をするとき、最初に覚えておくと圧倒的に便利なのが「フォルダの中身を一覧で取る」ことです。
例えば「このフォルダにあるCSVを全部読みたい」「画像ファイルだけを処理したい」といった処理の入口は、ほぼ必ず「一覧取得」です。
ここでは、初心者向けに os.listdir を中心に、コード例と一緒にじっくり解説します。
ファイル一覧取得の基本:os.listdirとは
osモジュールとos.listdirの役割
os モジュールは、Pythonから「OS(Windows / macOS / Linux)」の機能を使うための標準モジュールです。
その中の os.listdir() は、指定したフォルダの「中身の名前一覧(ファイル名・フォルダ名)」をリストで返してくれる関数です。
イメージとしては、「エクスプローラー(Finder)でフォルダを開いたときに見える名前の一覧」を、Pythonの世界に持ってくる感じです。
いちばんシンプルなコード例
import os
# カレントディレクトリ(今いるフォルダ)の中身を一覧取得
items = os.listdir(".")
print(items)
Pythonこのコードを実行すると、例えば次のような結果が出ます(環境によって変わります)。
['main.py', 'data', 'README.md']
ここで大事なのは、os.listdir() が返しているのは「文字列のリスト」だということです。
つまり、items は「ファイル名やフォルダ名の文字列が並んだリスト」になっています。
重要ポイント①:パス(場所)の指定を理解する
カレントディレクトリと相対パス
os.listdir(".") の "." は「今いるフォルダ(カレントディレクトリ)」を意味します。
他にも、例えば同じ階層に data というフォルダがあるなら、次のように書けます。
import os
items = os.listdir("data")
print(items)
Pythonこの場合は data フォルダの中身が一覧で取得されます。"data" のように書くのを「相対パス」と呼びます。今いる場所から見た相対的な位置を指定しているからです。
絶対パスを使う場合
Windowsなら r"C:\Users\あなたの名前\Documents" のような書き方、
macOS / Linuxなら "/Users/あなたの名前/Documents" のような書き方を「絶対パス」と呼びます。
import os
dir_path = r"C:\Users\user\Documents" # Windowsの例
items = os.listdir(dir_path)
print(items)
Python業務自動化では「毎回このフォルダを処理する」と決まっていることが多いので、絶対パスで書いてしまうのもよくあります。
重要ポイント②:「名前」だけ返ってくることを理解する
フルパスが欲しいときはos.path.join
os.listdir() が返すのは「名前だけ」です。
例えば os.listdir("data") の結果が ['a.csv', 'b.csv'] だったとします。
このままでは「dataフォルダの中の a.csv」という情報がなく、「ただの a.csv」という名前だけです。
ファイルを開くときなどは「フルパス」が必要になるので、os.path.join() で結合します。
import os
dir_path = "data"
items = os.listdir(dir_path)
for name in items:
full_path = os.path.join(dir_path, name)
print(full_path)
Python実行結果のイメージは次のようになります。
data/a.csv
data/b.csv
ここが実務ではかなり重要なポイントです。
「一覧取得 → os.path.join でフルパスにする → ファイルを開く」という流れは、業務自動化の定番パターンになります。
重要ポイント③:ファイルだけ/フォルダだけを取り出す
os.path.isfile と os.path.isdir
os.listdir() は「ファイル名」と「フォルダ名」を区別せず、全部まとめて返します。
「ファイルだけ処理したい」「フォルダだけ処理したい」という場面では、os.path.isfile() と os.path.isdir() を組み合わせます。
import os
dir_path = "data"
items = os.listdir(dir_path)
for name in items:
full_path = os.path.join(dir_path, name)
if os.path.isfile(full_path):
print("ファイル:", full_path)
if os.path.isdir(full_path):
print("フォルダ:", full_path)
Pythonここでのポイントは、isfile / isdir に渡すのは「フルパス」であることです。
名前だけ渡すと、カレントディレクトリ基準で判定されてしまい、意図しない結果になることがあります。
例題①:フォルダ内のCSVファイルだけを一覧表示する
仕様の整理
例題として、次のような処理を作ってみます。
dataフォルダの中から- 拡張子が
.csvのファイルだけを - 一覧表示する
これは「特定の拡張子のファイルだけを処理したい」という、業務自動化で超よくあるパターンです。
コード例と解説
import os
dir_path = "data"
items = os.listdir(dir_path)
for name in items:
# CSVファイルかどうかを判定
if name.endswith(".csv"):
full_path = os.path.join(dir_path, name)
print(full_path)
Pythonここで押さえておきたいポイントは次の通りです。
name.endswith(".csv")
文字列が「.csv」で終わっているかどうかをチェックしています。
大文字小文字を区別するので、.CSVも許可したい場合は工夫が必要です(例:name.lower().endswith(".csv"))。os.path.join(dir_path, name)
実際にファイルを開くときに困らないよう、フルパスに変換しています。
このコードを少し変えるだけで、「.txtだけ」「.xlsxだけ」など、いろいろなパターンに応用できます。
例題②:ファイル一覧を使って簡単な集計をする
やりたいことのイメージ
例えば、sales フォルダに「日別売上のCSV」がたくさん入っているとします。
sales_20240101.csvsales_20240102.csv- …
これらを全部読み込んで、売上の合計を出す、というのも典型的な業務自動化です。
ここでは「ファイル一覧取得」がどう活きるかにフォーカスして、簡略版のコードを書いてみます。
コード例(イメージ)
import os
import csv
dir_path = "sales"
items = os.listdir(dir_path)
total = 0
for name in items:
if not name.endswith(".csv"):
continue
full_path = os.path.join(dir_path, name)
with open(full_path, encoding="utf-8") as f:
reader = csv.reader(f)
next(reader) # ヘッダーを飛ばす想定
for row in reader:
amount = int(row[1]) # 2列目が金額だと仮定
total += amount
print("売上合計:", total)
Pythonここでのキモは、やはり最初の os.listdir(dir_path) です。
「どのファイルを処理するか」を自動で決めてくれるので、ファイルが増えてもコードを変える必要がありません。
これが「業務自動化でファイル一覧取得が重要」と言われる理由です。
例題③:ファイルとフォルダをきれいに分類して表示する
実務でよくある「中身の棚卸し」
「このフォルダ、何が入っているのか整理したい」という場面もよくあります。
ファイルとフォルダを分けて表示するだけでも、かなり状況が把握しやすくなります。
コード例
import os
dir_path = "data"
items = os.listdir(dir_path)
files = []
dirs = []
for name in items:
full_path = os.path.join(dir_path, name)
if os.path.isfile(full_path):
files.append(name)
elif os.path.isdir(full_path):
dirs.append(name)
print("フォルダ一覧:")
for d in dirs:
print(" ", d)
print("ファイル一覧:")
for f in files:
print(" ", f)
Pythonここでは、あえて「名前だけ」を files / dirs に入れています。
「表示用」と割り切るならフルパスでなくてもよく、用途に応じて「フルパスにするかどうか」を選べるようになると、コード設計の感覚も育っていきます。
もう一歩先へ:よくある落とし穴とコツ
並び順は保証されないので、必要ならソートする
os.listdir() が返すリストの順番は保証されません。
「名前順で処理したい」「日付順で処理したい」といった場合は、自分で sorted() を使って並び替えます。
import os
items = os.listdir("data")
items = sorted(items)
for name in items:
print(name)
Pythonサブフォルダの中まで見たいときは別の手段
os.listdir() は「直下だけ」を見る関数です。
サブフォルダの中まで再帰的に見たい場合は、os.walk() や glob、pathlib などを使うのが定番です。
まずは os.listdir() で「直下だけ」をしっかり扱えるようになってから、再帰的な処理に進むと理解しやすいです。
まとめ:業務自動化の入口としての「ファイル一覧取得」
os.listdir() は、業務自動化における「入口の入口」です。
- フォルダの中身を一覧で取得する
- フルパスに変換して実際の処理につなげる
- 拡張子や種別(ファイル/フォルダ)でフィルタする
- 並び替えや集計処理に発展させる
この流れを自分の手で何度か書いてみると、「あ、ファイル操作ってこういうパターンなんだな」という感覚がつかめてきます。
もしよければ、今あなたのPCの中にある適当なフォルダを1つ決めて、そのパスを使って同じコードを動かしてみませんか?
「自分の環境のファイル名がPythonから見える」という体験が、一気に実感を伴った理解につながります。

