Come ottenere la creazione di file & data/ora di modifica in Python?

Ho uno script che ha bisogno di fare alcune cose basate sulle date di creazione e modifica dei file, ma deve essere eseguito su Linux e Windows.

Qual è il modo migliore per ottenere le date di creazione e modifica dei file in Python?

Avete un paio di scelte. Per prima cosa, puoi usare le funzioni os.path.getmtime e 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)))

L'altra opzione è usare 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() non si riferisce al tempo di creazione sui sistemi *nix, ma piuttosto all'ultima volta che i dati dell'inode sono cambiati. (grazie a kojiro per aver reso questo fatto più chiaro nei commenti fornendo un link ad un interessante post sul blog)

Commentari (3)

os.stat https://docs.python.org/2/library/stat.html#module-stat

edit: nel codice più recente si dovrebbe probabilmente usare os.path.getmtime() (grazie Christian Oudard) ma notate che restituisce un valore in virgola mobile di time_t con frazione di secondi (se il vostro sistema operativo lo supporta)

Commentari (2)

Ci sono due metodi per ottenere il mod time, os.path.getmtime() o os.stat(), ma il ctime non è affidabile cross-platform (vedi sotto).

os.path.getmtime()

getmtime(path)
Ritorna il tempo dell'ultima modifica del percorso. Il valore di ritorno è un numero che dà il numero di secondi dall'epoca (vedere il modulo time). Solleva os.error se il file non non esiste o è inaccessibile. Nuovo nella versione 1.5.2. Modificato nella versione 2.3: Se os.stat_float_times() restituisce True, il risultato è un numero in virgola mobile.

os.stat()

stat(path)
Esegue una chiamata di sistema stat() sul percorso dato. Il valore di ritorno è un oggetto i cui attributi corrispondono ai membri della struttura stat, cioè: st_mode (protezione bits), st_ino (numero di inode), st_dev (dispositivo), st_nlink (numero di hard links), st_uid (ID utente del proprietario), st_gid (ID gruppo del proprietario), st_size (dimensione del file, in byte), st_atime (tempo del più recente accesso), st_mtime (tempo della più recente modifica del contenuto), st_ctime (dipendente dalla piattaforma; tempo della più recente modifica dei metadati su Unix, o tempo di creazione su Windows):

>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
>>> 

Nell'esempio precedente si dovrebbe usare statinfo.st_mtime o statinfo.st_ctime per ottenere rispettivamente mtime e ctime.

Commentari (0)