How to get file creation & modification date/times in Python?

前端 未结 13 1995
抹茶落季
抹茶落季 2020-11-21 11:44

I have a script that needs to do some stuff based on file creation & modification dates but has to run on Linux & Windows.

相关标签:
13条回答
  • 2020-11-21 11:52

    The best function to use for this is os.path.getmtime(). Internally, this just uses os.stat(filename).st_mtime.

    The datetime module is the best manipulating timestamps, so you can get the modification date as a datetime object like this:

    import os
    import datetime
    def modification_date(filename):
        t = os.path.getmtime(filename)
        return datetime.datetime.fromtimestamp(t)
    

    Usage example:

    >>> d = modification_date('/var/log/syslog')
    >>> print d
    2009-10-06 10:50:01
    >>> print repr(d)
    datetime.datetime(2009, 10, 6, 10, 50, 1)
    
    0 讨论(0)
  • 2020-11-21 11:59

    In Python 3.4 and above, you can use the object oriented pathlib module interface which includes wrappers for much of the os module. Here is an example of getting the file stats.

    >>> import pathlib
    >>> fname = pathlib.Path('test.py')
    >>> assert fname.exists(), f'No such file: {fname}'  # check that the file exists
    >>> print(fname.stat())
    os.stat_result(st_mode=33206, st_ino=5066549581564298, st_dev=573948050, st_nlink=1, st_uid=0, st_gid=0, st_size=413, st_atime=1523480272, st_mtime=1539787740, st_ctime=1523480272)
    

    For more information about what os.stat_result contains, refer to the documentation. For the modification time you want fname.stat().st_mtime:

    >>> import datetime
    >>> mtime = datetime.datetime.fromtimestamp(fname.stat().st_mtime)
    >>> print(mtime)
    datetime.datetime(2018, 10, 17, 10, 49, 0, 249980)
    

    If you want the creation time on Windows, or the most recent metadata change on Unix, you would use fname.stat().st_ctime:

    >>> ctime = datetime.datetime.fromtimestamp(fname.stat().st_ctime)
    >>> print(ctime)
    datetime.datetime(2018, 4, 11, 16, 57, 52, 151953)
    

    This article has more helpful info and examples for the pathlib module.

    0 讨论(0)
  • 2020-11-21 12:05

    If following symbolic links is not important, you can also use the os.lstat builtin.

    >>> os.lstat("2048.py")
    posix.stat_result(st_mode=33188, st_ino=4172202, st_dev=16777218L, st_nlink=1, st_uid=501, st_gid=20, st_size=2078, st_atime=1423378041, st_mtime=1423377552, st_ctime=1423377553)
    >>> os.lstat("2048.py").st_atime
    1423378041.0
    
    0 讨论(0)
  • 2020-11-21 12:07
    >>> import os
    >>> os.stat('feedparser.py').st_mtime
    1136961142.0
    >>> os.stat('feedparser.py').st_ctime
    1222664012.233
    >>> 
    
    0 讨论(0)
  • 2020-11-21 12:12

    os.stat does include the creation time. There's just no definition of st_anything for the element of os.stat() that contains the time.

    So try this:

    os.stat('feedparser.py')[8]

    Compare that with your create date on the file in ls -lah

    They should be the same.

    0 讨论(0)
  • 2020-11-21 12:13

    You have a couple of choices. For one, you can use the os.path.getmtime and os.path.getctime functions:

    import os.path, time
    print("last modified: %s" % time.ctime(os.path.getmtime(file)))
    print("created: %s" % time.ctime(os.path.getctime(file)))
    

    Your other option is to use 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))
    

    Note: ctime() does not refer to creation time on *nix systems, but rather the last time the inode data changed. (thanks to kojiro for making that fact more clear in the comments by providing a link to an interesting blog post)

    0 讨论(0)
提交回复
热议问题