ファイルの更新日時や作成日時を取得するには 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}日前に更新')