【Python】ファイルの更新日時・作成日時を変更する方法(os.utime・win32file)
Python を使用してファイルのタイムスタンプを変更する方法を解説します。
os.utime を使った基本的な方法
os.utime を使ってファイルの アクセス日時 と 修正日時 を変更します。ただし、os.utime では 作成日時 (ctime) は変更できません。Windowsに限りwin32fileを使うことで可能ですがそれが次の章で説明します。
import os
from datetime import datetime
# 対象のファイルパス
file_path = 'image.jpg'
# 指定日時
new_datetime = datetime(2024, 1, 1, 0, 0, 1)
# タイムスタンプに変換
new_timestamp = new_datetime.timestamp()
# アクセス時間と修正時間を指定日時に設定
os.utime(file_path, (new_timestamp, new_timestamp))
print(f"{file_path} の更新日時が {new_datetime} に変更されました。")
ファイルのプロパティを確認すると、右から左へと更新日だけが変わっていることがわかります。
win32file を使った Windows 向けの方法
2つ目のスクリプトでは、Windows API (pywintypes と win32file) を使い、作成日時・アクセス日時・修正日時 のすべてを変更します。Windows では os.utime だけでは 作成日時を変更できない ため、win32file.SetFileTime() を使う必要があります。
import os
from datetime import datetime
import pywintypes
import win32file
import win32con
# 対象のファイルパス
file_path = 'image.jpg'
# 指定日時
new_datetime = datetime(2024, 1, 1, 0, 0, 2)
# タイムスタンプに変換
new_timestamp = new_datetime.timestamp()
# アクセス時間と修正時間を指定日時に設定
os.utime(file_path, (new_timestamp, new_timestamp))
# ファイルのハンドルを取得
file_handle = win32file.CreateFile(
file_path,
win32con.GENERIC_WRITE,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
0,
None
)
# 作成日時・アクセス日時・修正日時を設定
new_time = pywintypes.Time(new_datetime)
win32file.SetFileTime(file_handle, new_time, new_time, new_time)
# ファイルのハンドルを閉じる
file_handle.close()
print(f"{file_path} の作成日時が {new_datetime} に変更されました。")
stat = os.stat(file_path)
print("アクセス日時:", datetime.fromtimestamp(stat.st_atime))
print("修正日時:", datetime.fromtimestamp(stat.st_mtime))
print("作成日時:", datetime.fromtimestamp(stat.st_ctime))
# [出力結果]
# アクセス日時: 2024-01-01 00:00:02
# 修正日時: 2024-01-01 00:00:02
# 作成日時: 2024-01-01 00:00:02
ファイルのプロパティを確認すると、右から左へと作成日、更新日が変わっていることがわかります。アクセス日時はプロパティを開いた時点で更新されてしまうのですが、上の出力結果でわかるとおりこちらも変更されています。
まとめ
Python を使えば、ファイルのタイムスタンプを簡単に変更できます。ただし、使用する手法によって変更できる範囲が異なります。
Linux/macOS の場合
- os.utime を使うことで、アクセス日時 と 修正日時 を変更できます。ただし、作成日時 は変更できません。
Windows の場合
- os.utime だけでは作成日時を変更できませんが、win32file.SetFileTime を使うことで 作成日時・アクセス日時・修正日時 のすべてを変更できます。
環境に応じて適切な方法を選ぶことで、ファイルのタイムスタンプを自由にカスタマイズできます。ログ管理やデータ整理の際に役立つので、ぜひ活用してください。
スポンサーリンク

