理論上一個檔案,會有 3個 time, create/access/modify, 在 windows/linux/mac 上會有些差異,mac 所認定的最早的datetime 開始日期和其他會有小小的不同。
以下是Python 存取 file datetime 的範例,首先是最簡單的 modify time:
import os import time from stat import * #returns a list of all the files on the current directory files = os.listdir('.') for f in files: #my folder has some jpegs and raw images if f.lower().endswith('jpg') or f.lower().endswith('crw'): st = os.stat(f) atime = st[ST_ATIME] #access time mtime = st[ST_MTIME] #modification time new_mtime = mtime + (4*3600) #new modification time #modify the file timestamp os.utime(f,(atime,new_mtime))
下面的比較難一點原文在:
Modify file create / access / write timestamp with python under windows
http://stackoverflow.com/a/39501288/1709587
Getting some sort of modification date in a cross-platform way is easy – just call os.path.getmtime(path)
and you’ll get the Unix timestamp of when the file at path
was last modified.
Getting file creation dates, on the other hand, is fiddly and platform-dependent, differing even between the three big OSes:
- On Windows, a file’s
ctime
(documented at https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx) stores its creation date. You can access this in Python throughos.path.getctime()
or the.st_ctime
attribute of the result of a call toos.stat()
. This won’t work on Unix, where thectime
is the last time that the file’s attributes or content were changed. - On Mac, as well as some other Unix-based OSes, you can use the
.st_birthtime
attribute of the result of a call toos.stat()
. - On Linux, this is currently impossible, at least without writing a C extension for Python. Although some file systems commonly used with Linux do store creation dates (for example,
ext4
stores them inst_crtime
) , the Linux kernel offers no way of accessing them; in particular, the structs it returns fromstat()
calls in C, as of the latest kernel version, don’t contain any creation date fields. You can also see that the identifierst_crtime
doesn’t currently feature anywhere in the Python source. At least if you’re onext4
, the data is attached to the inodes in the file system, but there’s no convenient way of accessing it.The next-best thing on Linux is to access the file’smtime
, through eitheros.path.getmtime()
or the.st_mtime
attribute of anos.stat()
result. This will give you the last time the file’s content was modified, which may be adequate for some use cases.
Putting this all together, cross-platform code should look something like this…
import os
import platform
def creation_date(path_to_file):
"""
Try to get the date that a file was created, falling back to when it was
last modified if that isn't possible.
See http://stackoverflow.com/a/39501288/1709587 for explanation.
"""
if platform.system() == 'Windows':
return os.path.getctime(path_to_file)
else:
stat = os.stat(path_to_file)
try:
return stat.st_birthtime
except AttributeError:
# We're probably on Linux. No easy way to get creation dates here,
# so we'll settle for when its content was last modified.
return stat.st_mtime