Python: Dateizugriffszeit (atime) setzen
Siehe auch: Python: Dateiänderungszeit (mtime) setzen
Sie können os.utime() verwenden, um die Zugriffs- und Änderungszeiten von Dateien in Python zu setzen. Um nur die Zugriffszeit (atime) zu setzen, verwenden Sie dieses Snippet:
# atime muss ein datetime sein
stat = os.stat(filename)
# times muss zwei Floats (Unix-Timestamps) enthalten: (atime, mtime)
os.utime(filename, times=(atime.timestamp(), stat.st_mtime))Oder verwenden Sie diese Hilfsfunktion:
from datetime import datetime
import os
def set_file_access_time(filename, atime):
"""
Setzt die Zugriffszeit einer angegebenen Datei auf die angegebene atime.
atime muss ein datetime-Objekt sein.
"""
stat = os.stat(filename)
mtime = stat.st_mtime
os.utime(filename, times=(atime.timestamp(), mtime))Verwendungsbeispiel:
# Setzt die Zugriffszeit von myfile.txt auf 1970-1-1, lässt die Änderungszeit unverändert
set_file_access_time("myfile.txt", datetime(1970, 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_access_time(filename, atime):
"""
Setzt die Zugriffszeit einer angegebenen Datei auf die angegebene atime.
atime muss ein datetime-Objekt sein.
"""
stat = os.stat(filename)
mtime = stat.st_mtime
os.utime(filename, (datetime_to_timestamp(atime), 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.