Mac上(以及一般Unix下)的Python os.path.getctime不會給出文件創建的日期,而是「最後一次更改的時間」(根據文檔至少)。另一方面,在Finder中,我可以看到真正的文件創建時間,因此這些信息由HFS +保存。在Mac上使用Python獲取文件創建時間
對於如何在Python程序中獲取Mac上的文件創建時間,您有什麼建議嗎?
Mac上(以及一般Unix下)的Python os.path.getctime不會給出文件創建的日期,而是「最後一次更改的時間」(根據文檔至少)。另一方面,在Finder中,我可以看到真正的文件創建時間,因此這些信息由HFS +保存。在Mac上使用Python獲取文件創建時間
對於如何在Python程序中獲取Mac上的文件創建時間,您有什麼建議嗎?
使用st_birthtime
財產上os.stat()
(或fstat
/lstat
)呼叫的結果。
def get_creation_time(path):
return os.stat(path).st_birthtime
您可以使用datetime.datetime.fromtimestamp()
將整數結果轉換爲日期時間對象。
出於某種原因,我不認爲這在第一次寫這個答案時適用於Mac OS X,但我可能會誤解,現在它甚至可以使用舊版本的Python。舊的答案在後面。
使用訪問系統調用stat64
(與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
使用subprocess
調用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())
ctime在平臺上有所不同:某些系統(如Unix)是最後一次元數據更改的時間,在其他系統(如Windows)上,創建時間爲。這是因爲Unices通常不會保留「原創」創作時間。
這就是說你可以訪問操作系統提供的所有信息,stat模塊。
The stat module defines constants and functions for interpreting the results of os.stat(), os.fstat() and os.lstat() (if they exist). For complete details about the stat, fstat and lstat calls, consult the documentation for your system.
stat.ST_CTIME
The 「ctime」 as reported by the operating system. On some systems (like Unix) is the time of the last metadata change, and, on others (like Windows), is the creation time (see platform documentation for details).
重複:HTTP:/ /stackoverflow.com/questions/237079/how-to-get-file-creation-modification-date-times-in-python – 2009-06-03 21:20:36
@ S.Lott :並非如此,因爲在Mac上獲取文件創建時間本質上是非跨平臺的。 – Miles 2009-06-03 21:25:56
@Miles:也許這是真的,但那裏的答案完全適用於這個問題。 – 2009-06-03 21:29:28