Saltar al contenido

¿Cómo obtener la fecha / hora de creación y modificación de archivos en Python?

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 de os.path.getctime() o la .st_ctime attribute del resultado de una llamada a os.stat(). Esta no lo haré trabajar en Unix, donde el ctime 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 a os.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 en st_crtime), el kernel de Linux no ofrece forma de acceder a ellos; en particular, las estructuras de las que devuelve stat() 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 identificador st_crtime actualmente no aparece en ninguna parte de la fuente de Python. Al menos si estás en ext4los 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 mtimea través de cualquiera os.path.getmtime() o la .st_mtime attribute de un os.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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *