Agradecemos tu ayuda para extender nuestras secciones en referencia a las ciencias de la computación.
Solución:
Obtener algún tipo de fecha de modificación de forma multiplataforma es fácil: solo llame os.path.getmtime(path)
y obtendrá la marca de tiempo de Unix de cuando el archivo en path
fue modificado por última vez.
Obtener archivo creación Las fechas, por otro lado, son complicadas y dependen de la plataforma, y difieren incluso entre los tres grandes sistemas operativos:
- En ventanasun archivo
ctime
(documentado en https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx) almacena su fecha de creación. Puede acceder a esto en Python a través deos.path.getctime()
o la.st_ctime
attribute del resultado de una llamada aos.stat()
. Esta no lo haré trabajar en Unix, donde elctime
es la última vez que el archivo attributes o el contenido fue cambiado. - En Macasí como algunos otros sistemas operativos basados en Unix, puede usar el
.st_birthtime
attribute del resultado de una llamada aos.stat()
. -
En linux, esto es actualmente imposible, al menos sin escribir una extensión C para Python. Aunque algunos sistemas de archivos comúnmente utilizados con Linux almacenan fechas de creación (por ejemplo,
ext4
los almacena enst_crtime
), el kernel de Linux no ofrece forma de acceder a ellos; en particular, las estructuras de las que devuelvestat()
las llamadas en C, a partir de la última versión del kernel, no contienen ningún campo de fecha de creación. También puede ver que el identificadorst_crtime
actualmente no aparece en ninguna parte de la fuente de Python. Al menos si estás enext4
los datos es adjunto a los inodos en el sistema de archivos, pero no hay una forma conveniente de acceder a él.Lo siguiente mejor en Linux es acceder al archivo
mtime
a través de cualquieraos.path.getmtime()
o la.st_mtime
attribute de unos.stat()
resultado. Esto le dará la última vez que se modificó el contenido del archivo, lo que puede ser adecuado para algunos casos de uso.
Poniendo todo esto junto, el código multiplataforma debería verse así…
import os
import platform
def creation_date(path_to_file):
"""
Try to get the date that a file was created, falling back to when it was
last modified if that isn't possible.
See http://stackoverflow.com/a/39501288/1709587 for explanation.
"""
if platform.system() == 'Windows':
return os.path.getctime(path_to_file)
else:
stat = os.stat(path_to_file)
try:
return stat.st_birthtime
except AttributeError:
# We're probably on Linux. No easy way to get creation dates here,
# so we'll settle for when its content was last modified.
return stat.st_mtime
Usted tiene un par de opciones. Por un lado, puede utilizar el os.path.getmtime
y os.path.getctime
funciones:
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 usar 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()
lo hace no consulte el tiempo de creación en los sistemas * nix, sino la última vez que cambiaron los datos del inodo. (gracias a kojiro por aclarar ese hecho en los comentarios al proporcionar un enlace a una publicación de blog interesante)
La mejor función para usar para esto es os.path.getmtime(). Internamente, esto solo usa os.stat(filename).st_mtime
.
El módulo de fecha y hora es el que mejor manipula las marcas de tiempo, por lo que puede obtener la fecha de modificación como un datetime
objeto como este:
import os
import datetime
def modification_date(filename):
t = os.path.getmtime(filename)
return datetime.datetime.fromtimestamp(t)
Ejemplo de uso:
>>> d = modification_date('/var/log/syslog')
>>> print d
2009-10-06 10:50:01
>>> print repr(d)
datetime.datetime(2009, 10, 6, 10, 50, 1)
Si sostienes algún recelo o forma de regenerar nuestro tutorial eres capaz de escribir una anotación y con mucho gusto lo observaremos.