Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイル一覧取得

Python Python
スポンサーリンク

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.csv
  • sales_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()globpathlib などを使うのが定番です。

まずは os.listdir() で「直下だけ」をしっかり扱えるようになってから、再帰的な処理に進むと理解しやすいです。


まとめ:業務自動化の入口としての「ファイル一覧取得」

os.listdir() は、業務自動化における「入口の入口」です。

  • フォルダの中身を一覧で取得する
  • フルパスに変換して実際の処理につなげる
  • 拡張子や種別(ファイル/フォルダ)でフィルタする
  • 並び替えや集計処理に発展させる

この流れを自分の手で何度か書いてみると、「あ、ファイル操作ってこういうパターンなんだな」という感覚がつかめてきます。

もしよければ、今あなたのPCの中にある適当なフォルダを1つ決めて、そのパスを使って同じコードを動かしてみませんか?
「自分の環境のファイル名がPythonから見える」という体験が、一気に実感を伴った理解につながります。

タイトルとURLをコピーしました