Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイル更新日時取得

Python Python
スポンサーリンク

「ファイル更新日時取得」は“最新データを見抜く”ための武器

業務自動化をしていると、
「どのファイルが一番新しいか知りたい」
「最近更新されたファイルだけ処理したい」
「古いファイルをアーカイブしたい」
といったニーズが必ず出てきます。

そこで使うのが「ファイルの更新日時」です。
Pythonでは os.path.getmtime()os.stat()pathlib を使って、更新日時を簡単に取得できます。

ここから、初心者向けに「まずこれだけ押さえればOK」というところから、実務テンプレートまで、じっくり解説していきます。


基本の関数:os.path.getmtime で更新日時を取る

いちばんシンプルなコード

まずは「1つのファイルの更新日時を取得して表示する」最小コードです。

import os
from datetime import datetime

path = "data/report.csv"

timestamp = os.path.getmtime(path)
dt = datetime.fromtimestamp(timestamp)

print("更新日時:", dt)
Python

os.path.getmtime(path) は、そのファイルの「最終更新時刻」を UNIXタイムスタンプ(エポック秒)で返します。
datetime.fromtimestamp() で、人間が読める「日付+時刻」に変換しています。

ここで大事なのは、
「getmtime が返すのは“秒数”であって、そのままだと読みにくい」
「datetime に変換して初めて“業務で使える情報”になる」
という二段構えになっていることです。


重要ポイントを深掘り:存在しないファイルを指定したらどうなるか

FileNotFoundError を避けるための存在確認

os.path.getmtime() は、ファイルが存在しないと FileNotFoundError を投げます。

業務バッチでこれをやると、夜中の処理が途中で落ちてしまいます。
そこで、「更新日時を取る前に存在確認をする」のが安全な書き方です。

import os
from datetime import datetime

path = "data/report.csv"

if not os.path.isfile(path):
    print("エラー: ファイルが見つかりません:", path)
else:
    ts = os.path.getmtime(path)
    dt = datetime.fromtimestamp(ts)
    print("更新日時:", dt)
Python

ここでは os.path.isfile() を使って、「存在する」かつ「ファイルである」ことを確認しています。
「存在確認 → 更新日時取得」という順番をテンプレートとして覚えておくと、エラーをかなり減らせます。


タイムスタンプとタイムゾーンの話を少しだけ

UNIXタイムスタンプとは何か

os.path.getmtime() が返すのは「UNIX時間(エポック秒)」です。
これは「1970年1月1日 00:00:00 UTC からの経過秒数」で、世界共通の“時間の数値表現”だと思ってください。

datetime.fromtimestamp() は、これを「ローカルタイム(あなたのPCのタイムゾーン)」に変換します。
日本で実行していれば、日本時間として解釈されます。

業務で「タイムゾーンをまたいで扱う」ような高度なケースでなければ、
まずは「fromtimestamp でローカル時間に変換する」で十分です。


例題①:フォルダ内のファイルを「更新日時が新しい順」に並べる

シナリオ

logs フォルダにログファイルがたくさんあり、
「一番新しいログから順に見たい」というケースを考えます。

コード例

import os
from datetime import datetime

folder = "logs"

files = []

for name in os.listdir(folder):
    path = os.path.join(folder, name)

    if not os.path.isfile(path):
        continue

    ts = os.path.getmtime(path)
    files.append((path, ts))

files.sort(key=lambda x: x[1], reverse=True)

for path, ts in files:
    dt = datetime.fromtimestamp(ts)
    print(dt, ":", path)
Python

ここでやっていることを言葉で整理すると、こうなります。

まず「候補を全部取る」。
次に「ファイルだけに絞る」。
そして「更新日時を一緒に持たせてリストに入れる」。
最後に「更新日時でソートして表示する」。

「更新日時でソートする」という発想が入るだけで、
「どれが最新か分からないから全部開いて確認する」という手作業から解放されます。


例題②:一定期間内に更新されたファイルだけを抽出する

シナリオ

data フォルダの中から、「直近3日以内に更新されたファイルだけ」を処理したい。
これは「最近更新されたデータだけを集計する」といった業務でよくあるパターンです。

コード例

import os
from datetime import datetime, timedelta

folder = "data"
days = 3

now = datetime.now()
limit = now - timedelta(days=days)

for name in os.listdir(folder):
    path = os.path.join(folder, name)

    if not os.path.isfile(path):
        continue

    ts = os.path.getmtime(path)
    dt = datetime.fromtimestamp(ts)

    if dt >= limit:
        print("最近更新されたファイル:", dt, ":", path)
Python

ここでは、「現在時刻」と「更新日時」を同じ datetime 型にして比較しています。
「何日前までを“最近”とみなすか」を days で変えられるので、
運用ルールに合わせて簡単に調整できます。


例題③:最も新しいファイルだけを処理するテンプレート

シナリオ

inbox フォルダに複数のファイルがあり、
「一番新しいファイルだけを処理したい」というケースです。

コード例

import os
from datetime import datetime

folder = "inbox"

latest_path = None
latest_ts = None

for name in os.listdir(folder):
    path = os.path.join(folder, name)

    if not os.path.isfile(path):
        continue

    ts = os.path.getmtime(path)

    if latest_ts is None or ts > latest_ts:
        latest_ts = ts
        latest_path = path

if latest_path is None:
    print("処理対象のファイルがありません")
else:
    dt = datetime.fromtimestamp(latest_ts)
    print("最新ファイル:", dt, ":", latest_path)
    # ここで latest_path を使って処理を書く
Python

このテンプレートは、「最新のレポートだけ読み込む」「最新のバックアップだけ検証する」など、
実務でそのまま使える場面が非常に多いです。


pathlib を使った、少しモダンな書き方

Path.stat().st_mtime で更新日時を取る

pathlib を使うと、パス操作と更新日時取得をオブジェクト指向っぽく書けます。

from pathlib import Path
from datetime import datetime

p = Path("data/report.csv")

if p.is_file():
    ts = p.stat().st_mtime
    dt = datetime.fromtimestamp(ts)
    print("更新日時:", dt)
else:
    print("ファイルがありません:", p)
Python

p.stat().st_mtime が「最終更新時刻(UNIXタイムスタンプ)」です。

os.path 版とやっていることは同じなので、
まずは os.path.getmtime に慣れてから pathlib に移行しても十分です。


もう一歩だけ深掘り:mtime / ctime / atime の違い

どの“時間”を見ているのか

ファイルには、いくつかのタイムスタンプが紐づいています。

mtime は「内容が最後に更新された時刻」です。
ctime は「メタデータが更新された時刻(UNIX)/作成時刻(Windows)」という、少しややこしい存在です。
atime は「最後にアクセスされた時刻」です。

業務で「最新の内容を知りたい」場合、基本的には mtime(更新日時)を見れば十分です。
「作成日時が欲しい」「OSごとの差に気をつけたい」といった話は、もう少し先のステップで学べばOKです。


まとめ:「いつ更新されたか」を意識すると、自動化の精度が上がる

ファイル更新日時取得は、一見地味ですが、業務自動化ではかなり重要な役割を持ちます。

どのファイルが最新かを自動で判断する。
一定期間内に更新されたファイルだけを対象にする。
古いファイルをアーカイブ・削除する基準にする。

そのための基本ツールが os.path.getmtime()datetime.fromtimestamp() です。

まずは、あなたのPCにある適当なフォルダを一つ決めて、
今日の「新しい順に並べる」コードをそのまま動かしてみてください。

「最新のファイルが一瞬で分かる」という感覚がつかめたら、
そこから先の「どれを処理するか」「どれをスキップするか」という判断も、
どんどんコードに落とし込めるようになっていきます。

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