「ファイル更新日時取得」は“最新データを見抜く”ための武器
業務自動化をしていると、
「どのファイルが一番新しいか知りたい」
「最近更新されたファイルだけ処理したい」
「古いファイルをアーカイブしたい」
といったニーズが必ず出てきます。
そこで使うのが「ファイルの更新日時」です。
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)
Pythonos.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)
Pythonp.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にある適当なフォルダを一つ決めて、
今日の「新しい順に並べる」コードをそのまま動かしてみてください。
「最新のファイルが一瞬で分かる」という感覚がつかめたら、
そこから先の「どれを処理するか」「どれをスキップするか」という判断も、
どんどんコードに落とし込めるようになっていきます。
