1. 程式人生 > >[Python] Change timestamp on file to current time?

[Python] Change timestamp on file to current time?

理論上一個檔案,會有 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 Mac, as well as some other Unix-based OSes, you can use the .st_birthtime attribute of the result of a call to os.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 in st_crtime) , the Linux kernel offers no way of accessing them; in particular, the structs it returns from stat() calls in C, as of the latest kernel version, don’t contain any creation date fields. You can also see that the identifier st_crtime doesn’t currently feature anywhere in the Python source. At least if you’re on ext4, 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’s mtime, through either os.path.getmtime() or the .st_mtime attribute of an os.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