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