Python でファイルの更新日時・作成日時を取得する

ファイルの更新日時や作成日時を取得するには os.stat()os.path.getmtime() を使う。

更新日時を取得する

os.path.getmtime() でファイルの最終更新日時を UNIX タイムスタンプで取得できる。

import os
from datetime import datetime

mtime = os.path.getmtime('data.txt')
print(mtime)  # 1703123456.789 のような浮動小数点数

# datetime に変換
dt = datetime.fromtimestamp(mtime)
print(dt)  # 2024-12-21 10:30:56.789000

アクセス日時を取得する

os.path.getatime() で最終アクセス日時を取得できる。

import os

atime = os.path.getatime('data.txt')

ただし、アクセス日時はファイルシステムの設定によっては更新されないことがある。

作成日時を取得する

os.path.getctime() は、Windows ではファイルの作成日時を返すが、Unix 系では最後にメタデータが変更された日時(inode の変更日時)を返す。

import os

ctime = os.path.getctime('data.txt')

Unix 系で真の作成日時を取得するには os.stat()st_birthtime を使うが、これはすべてのファイルシステムで利用できるわけではない。

pathlib を使う方法

pathlib では stat() メソッドでファイル情報を取得する。

from pathlib import Path
from datetime import datetime

path = Path('data.txt')
stat_info = path.stat()

# 更新日時
mtime = datetime.fromtimestamp(stat_info.st_mtime)
print(f'更新日時: {mtime}')

# アクセス日時
atime = datetime.fromtimestamp(stat_info.st_atime)
print(f'アクセス日時: {atime}')

日時をフォーマットする

datetime オブジェクトに変換すれば、任意の形式で表示できる。

import os
from datetime import datetime

mtime = os.path.getmtime('data.txt')
dt = datetime.fromtimestamp(mtime)

print(dt.strftime('%Y年%m月%d%H:%M:%S'))  # 2024年12月21日 10:30:56
print(dt.isoformat())  # 2024-12-21T10:30:56.789000

更新日時を変更する

os.utime() を使うとファイルのアクセス日時と更新日時を変更できる。

import os
from datetime import datetime

# 現在時刻に設定
os.utime('data.txt', None)

# 特定の日時に設定
target = datetime(2024, 1, 1, 0, 0, 0)
timestamp = target.timestamp()
os.utime('data.txt', (timestamp, timestamp))  # (atime, mtime)

ファイルの年齢を計算する

ファイルが何日前に更新されたかを計算する例を示す。

import os
from datetime import datetime

mtime = os.path.getmtime('data.txt')
mtime_dt = datetime.fromtimestamp(mtime)
age = datetime.now() - mtime_dt

print(f'{age.days}日前に更新')