Tengo un script que necesita hacer algunas cosas basadas en las fechas de creación y modificación de archivos, pero tiene que ejecutarse en Linux y Windows.
¿Cuál es la mejor manera de obtener las fechas de creación y modificación de archivos en Python?
Tienes un par de opciones. Por un lado, puedes utilizar las funciones os.path.getmtime
y os.path.getctime
:
import os.path, time
print("last modified: %s" % time.ctime(os.path.getmtime(file)))
print("created: %s" % time.ctime(os.path.getctime(file)))
Su otra opción es utilizar os.stat
:
import os, time
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
print("last modified: %s" % time.ctime(mtime))
Nota: ctime()
no se refiere al tiempo de creación en los sistemas *nix, sino a la última vez que cambiaron los datos del inodo. (gracias a kojiro por aclarar este hecho en los comentarios proporcionando un enlace a una interesante entrada del blog)
os.stat https://docs.python.org/2/library/stat.html#module-stat
edit: En el código más reciente probablemente deberías usar os.path.getmtime() (gracias Christian Oudard) pero ten en cuenta que devuelve un valor de punto flotante de time_t con fracción de segundos (si tu SO lo soporta)
Hay dos métodos para obtener el tiempo del mod, os.path.getmtime() o os.stat(), pero el ctime no es fiable entre plataformas (ver más abajo).
getmtime(ruta)
Devuelve la hora de la última modificación de la ruta. El valor de retorno es un número que da el
número de segundos desde la época (véase el módulo de tiempo). Lanza os.error si el fichero no existe
no existe o es inaccesible. Nuevo en la versión 1.5.2. Cambiado en la versión 2.3: Si
os.stat_float_times() devuelve True, el resultado es un número de punto flotante.
stat(ruta)
Realizar una llamada al sistema stat() en la ruta dada. El valor de retorno es un objeto cuyos
atributos corresponden a los miembros de la estructura stat, a saber: st_mode (protección
bits), st_ino (número de inodo), st_dev (dispositivo), st_nlink (número de enlaces duros), st_uid
(ID de usuario del propietario), st_gid (ID de grupo del propietario), st_size (tamaño del archivo, en bytes),
st_atime (hora del último acceso), st_mtime (hora de la última modificación
modificación), st_ctime (depende de la plataforma; hora de la modificación más reciente de los metadatos en Unix, o la hora de creación en Windows):
>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
>>>
En el ejemplo anterior se utilizaría statinfo.st_mtime o statinfo.st_ctime para obtener el mtime y el ctime, respectivamente.