# 8.14 Standard Module `stat`

The `stat` module defines constants and functions for interpreting the results of `os.stat()` and `os.lstat()` (if they exist). For complete details about the `stat()` and `lstat()` system calls, consult your local man pages.

The `stat` module defines the following functions:

`S_ISDIR` (mode)
  Return non-zero if the mode was gotten from a directory file.

`S_ISCHR` (mode)
  Return non-zero if the mode was gotten from a character special device.

`S_ISREG` (mode)
  Return non-zero if the mode was gotten from a regular file.

`S_ISFIFO` (mode)
  Return non-zero if the mode was gotten from a FIFO.

`S_ISLNK` (mode)
  Return non-zero if the mode was gotten from a symbolic link.

`S_ISSOCK` (mode)
  Return non-zero if the mode was gotten from a socket.

All the data items below are simply symbolic indexes into the 10-tuple returned by `os.stat()` or `os.lstat()`.

`ST_MODE`
  Inode protection mode.

`ST_INO`
  Inode number.

`ST_DEV`
  Device inode resides on.

`ST_NLINK`
  Number of links to the inode.

`ST_UID`
  User id of the owner.

`ST_GID`
  Group id of the owner.

`ST_SIZE`
  File size in bytes.

`ST_ATIME`
  Time of last access.

`ST_MTIME`
  Time of last modification.

`ST_CTIME`
  Time of creation.

Example:

    import os, sys
    from stat import *

    def process(dir, func):
        '''recursively descend the directory rooted at dir, calling func for
           each regular file'''

        for f in os.listdir(dir):
            mode = os.stat('%s/%s' % (dir, f))[ST_MODE]
            if S_ISDIR(mode):
                # recurse into directory
                process('%s/%s' % (dir, f), func)
            elif S_ISREG(mode):
                func('%s/%s' % (dir, f))
            else:
                print 'Skipping %s/%s' % (dir, f)

    def f(file):
        print 'frobbed', file

    if __name__ == '__main__': process(sys.argv[1], f)