Python: Dateiänderungszeit (mtime) setzen
Siehe auch: Python: Dateizugriffszeit (atime) setzen
Sie können os.utime() verwenden, um die Zugriffs- und Änderungszeiten von Dateien in Python zu setzen. Um nur die Änderungszeit (mtime) zu setzen, verwenden Sie dieses Snippet:
# mtime muss ein datetime sein
stat = os.stat(filename)
# times muss zwei Floats (Unix-Timestamps) enthalten: (atime, mtime)
os.utime(filename, times=(stat.st_atime, mtime.timestamp()))Oder verwenden Sie diese Hilfsfunktion:
from datetime import datetime
import os
def set_file_modification_time(filename, mtime):
"""
Setzt die Änderungszeit einer angegebenen Datei auf die angegebene mtime.
mtime muss ein datetime-Objekt sein.
"""
stat = os.stat(filename)
atime = stat.st_atime
os.utime(filename, times=(atime, mtime.timestamp()))Verwendungsbeispiel:
# Setzt die Änderungszeit von myfile.txt auf 1980-1-1, lässt die Zugriffszeit unverändert
set_file_modification_time("myfile.txt", datetime(1980, 1, 1, 0, 0, 0))Falls Sie mit Python 2.x kompatibel sein müssen, verwenden Sie stattdessen diese Variante:
from datetime import datetime
import os
import time
def datetime_to_timestamp(dt):
return time.mktime(dt.timetuple()) + dt.microsecond/1e6
def set_file_modification_time(filename, mtime):
"""
Setzt die Änderungszeit einer angegebenen Datei auf die angegebene mtime.
mtime muss ein datetime-Objekt sein.
"""
stat = os.stat(filename)
atime = stat.st_atime
os.utime(filename, (atime, datetime_to_timestamp(mtime)))Siehe Python 2: datetime in Unix-Timestamp umwandeln und Python: AttributeError: datetime.datetime object has no attribute timestamp beheben für weitere Details zu diesem alternativen Ansatz.
Falls Sie die Möglichkeit haben, Python 3.x zu verwenden, empfehle ich die oben aufgeführte Python 3-Version, da sie viel lesbarer ist, weniger Code erfordert und (zum Zeitpunkt der Erstellung dieses Codes) Python 2 nur noch in wenigen Monaten abgeschaltet wird. Ich empfehle, Ihre Skripte so bald wie möglich mit Python 3-Kompatibilität zu aktualisieren wie viele andere Projekte bereits getan haben.