Eu tenho um script que precisa fazer algumas coisas baseadas na criação de arquivos & datas de modificação mas tem que rodar no Linux & Windows.
Qual's a melhor cross-platform forma de obter criação de ficheiros & data/horas de modificação em Python?
Tens um par de escolhas. Para uma, você pode utilizar as funções `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)))
Sua outra opção é 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()
não_ se refere ao tempo de criação em sistemas nix, mas sim à última vez que os dados inode foram alterados. (obrigado ao kojiro por tornar esse fato mais claro nos comentários, fornecendo um link para um post de blog interessante)
os.stat https://docs.python.org/2/library/stat.html#module-stat
edit: Em código mais recente você provavelmente deveria usar os.path.getmtime() (obrigado Christian Oudard) mas note que ele retorna um valor de ponto flutuante de tempo_t com fração de segundos (se o seu sistema operacional suportar isso)
Existem dois métodos para obter o mod time, os.path.getmtime() ou os.stat(), mas o ctime não é confiável entre plataformas (veja abaixo).
**getmtime**(caminho)
Retornar o tempo da última modificação do caminho. O valor de retorno é um número que dá o
número de segundos desde a época (ver o módulo de tempo). Levante os.erro se o arquivo
não existe ou é inacessível. Novo na versão 1.5.2. Alterado na versão 2.3: Se
os.stat_float_times() retorna Verdadeiro, o resultado é um número de ponto flutuante.*
stat**(caminho)
Executar uma chamada de sistema stat() no caminho dado. O valor de retorno é um objeto cujo
Os atributos correspondem aos membros da estrutura estatutária, a saber: st_mode (proteção
bits), st_ino (número de inode), st_dev (dispositivo), st_nlink (número de links rígidos), st_uid
(ID de usuário do proprietário), st_gid (ID de grupo do proprietário), st_size (tamanho do arquivo, em bytes),
st_atime (hora do acesso mais recente), st_mtime* (hora do conteúdo mais recente)
modificação), *st_ctime (dependente da plataforma; hora da alteração mais recente dos metadados no Unix, ou a hora da criação no Windows)*:
>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
>>>
No exemplo acima, você usaria statinfo.st_mtime ou statinfo.st_ctime para obter o mtime e ctime, respectivamente.