Użyj właściwości st_birthtime
w wyniku wezwania do os.stat()
(lub fstat
/lstat
).
def get_creation_time(path):
return os.stat(path).st_birthtime
można przekonwertować wynik całkowitej do obiektu datetime przy użyciu datetime.datetime.fromtimestamp()
.
Z jakiegoś powodu nie wydaje mi się, żeby działało na systemie Mac OS X, kiedy ta odpowiedź została napisana po raz pierwszy, ale mógłbym się mylić i działa już teraz, nawet w starszych wersjach Pythona. Stara odpowiedź jest poniżej dla potomności.
Korzystanie ctypes
aby uzyskać dostęp do funkcji systemowej stat64
(działa z Python 2.5+):
from ctypes import *
class struct_timespec(Structure):
_fields_ = [('tv_sec', c_long), ('tv_nsec', c_long)]
class struct_stat64(Structure):
_fields_ = [
('st_dev', c_int32),
('st_mode', c_uint16),
('st_nlink', c_uint16),
('st_ino', c_uint64),
('st_uid', c_uint32),
('st_gid', c_uint32),
('st_rdev', c_int32),
('st_atimespec', struct_timespec),
('st_mtimespec', struct_timespec),
('st_ctimespec', struct_timespec),
('st_birthtimespec', struct_timespec),
('dont_care', c_uint64 * 8)
]
libc = CDLL('libc.dylib') # or /usr/lib/libc.dylib
stat64 = libc.stat64
stat64.argtypes = [c_char_p, POINTER(struct_stat64)]
def get_creation_time(path):
buf = struct_stat64()
rv = stat64(path, pointer(buf))
if rv != 0:
raise OSError("Couldn't stat file %r" % path)
return buf.st_birthtimespec.tv_sec
Korzystanie subprocess
zadzwonić narzędzia stat
:
import subprocess
def get_creation_time(path):
p = subprocess.Popen(['stat', '-f%B', path],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if p.wait():
raise OSError(p.stderr.read().rstrip())
else:
return int(p.stdout.read())
Duplikat: http://stackoverflow.com/questions/237079/how-to-get-file-creation-modification-date-times-in-python –
@ S.Lott : niezupełnie, ponieważ uzyskanie czasu utworzenia pliku na komputerze Mac jest z natury nieinterfejsalne. – Miles
@Miles: być może prawda, ale odpowiedź na to pytanie idealnie pasuje do tego pytania. –