stat β Interpreting stat() resultsΒΆ
Source code: Lib/stat.py
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.
Changed in version 3.4: The stat module is backed by a C implementation.
The stat module defines the following functions to test for specific file
types:
- stat.S_ISDIR(mode)ΒΆ
Return non-zero if the mode is from a directory.
- stat.S_ISCHR(mode)ΒΆ
Return non-zero if the mode is from a character special device file.
- stat.S_ISBLK(mode)ΒΆ
Return non-zero if the mode is from a block special device file.
- stat.S_ISREG(mode)ΒΆ
Return non-zero if the mode is from a regular file.
- stat.S_ISFIFO(mode)ΒΆ
Return non-zero if the mode is from a FIFO (named pipe).
- stat.S_ISLNK(mode)ΒΆ
Return non-zero if the mode is from a symbolic link.
- stat.S_ISSOCK(mode)ΒΆ
Return non-zero if the mode is from a socket.
- stat.S_ISDOOR(mode)ΒΆ
Return non-zero if the mode is from a door.
Added in version 3.4.
- stat.S_ISPORT(mode)ΒΆ
Return non-zero if the mode is from an event port.
Added in version 3.4.
- stat.S_ISWHT(mode)ΒΆ
Return non-zero if the mode is from a whiteout.
Added in version 3.4.
Two additional functions are defined for more general manipulation of the fileβs mode:
- stat.S_IMODE(mode)ΒΆ
Return the portion of the fileβs mode that can be set by
os.chmod()βthat is, the fileβs permission bits, plus the sticky bit, set-group-id, and set-user-id bits (on systems that support them).
- stat.S_IFMT(mode)ΒΆ
Return the portion of the fileβs mode that describes the file type (used by the
S_IS*()functions above).
Normally, you would use the os.path.is*() functions for testing the type
of a file; the functions here are useful when you are doing multiple tests of
the same file and wish to avoid the overhead of the stat() system call
for each test. These are also useful when checking for information about a file
that isnβt handled by os.path, like the tests for block and character
devices.
Example:
import os, sys
from stat import *
def walktree(top, callback):
'''recursively descend the directory tree rooted at top,
calling the callback function for each regular file'''
for f in os.listdir(top):
pathname = os.path.join(top, f)
mode = os.lstat(pathname).st_mode
if S_ISDIR(mode):
# It's a directory, recurse into it
walktree(pathname, callback)
elif S_ISREG(mode):
# It's a file, call the callback function
callback(pathname)
else:
# Unknown file type, print a message
print('Skipping %s' % pathname)
def visitfile(file):
print('visiting', file)
if __name__ == '__main__':
walktree(sys.argv[1], visitfile)
An additional utility function is provided to convert a fileβs mode in a human readable string:
- stat.filemode(mode)ΒΆ
Convert a fileβs mode to a string of the form β-rwxrwxrwxβ.
Added in version 3.3.
All the variables below are simply symbolic indexes into the 10-tuple returned
by os.stat(), os.fstat() or os.lstat().
- stat.ST_MODEΒΆ
Inode protection mode.
- stat.ST_INOΒΆ
Inode number.
- stat.ST_DEVΒΆ
Device inode resides on.
- stat.ST_NLINKΒΆ
Number of links to the inode.
- stat.ST_UIDΒΆ
User id of the owner.
- stat.ST_GIDΒΆ
Group id of the owner.
- stat.ST_SIZEΒΆ
Size in bytes of a plain file; amount of data waiting on some special files.
- stat.ST_ATIMEΒΆ
Time of last access.
- stat.ST_MTIMEΒΆ
Time of last modification.
- 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).
The interpretation of βfile sizeβ changes according to the file type. For plain
files this is the size of the file in bytes. For FIFOs and sockets under most
flavors of Unix (including Linux in particular), the βsizeβ is the number of
bytes waiting to be read at the time of the call to os.stat(),
os.fstat(), or os.lstat(); this can sometimes be useful, especially
for polling one of these special files after a non-blocking open. The meaning
of the size field for other character and block devices varies more, depending
on the implementation of the underlying system call.
The variables below define the flags used in the ST_MODE field.
Use of the functions above is more portable than use of the first set of flags:
- stat.S_IFSOCKΒΆ
Socket.
- stat.S_IFLNKΒΆ
Symbolic link.
- stat.S_IFREGΒΆ
Regular file.
- stat.S_IFBLKΒΆ
Block device.
- stat.S_IFDIRΒΆ
Directory.
- stat.S_IFCHRΒΆ
Character device.
- stat.S_IFIFOΒΆ
FIFO.
- stat.S_IFDOORΒΆ
Door.
Added in version 3.4.
- stat.S_IFPORTΒΆ
Event port.
Added in version 3.4.
- stat.S_IFWHTΒΆ
Whiteout.
Added in version 3.4.
Note
S_IFDOOR, S_IFPORT or S_IFWHT are defined as
0 when the platform does not have support for the file types.
The following flags can also be used in the mode argument of os.chmod():
- stat.S_ISUIDΒΆ
Set UID bit.
- stat.S_ISGIDΒΆ
Set-group-ID bit. This bit has several special uses. For a directory it indicates that BSD semantics is to be used for that directory: files created there inherit their group ID from the directory, not from the effective group ID of the creating process, and directories created there will also get the
S_ISGIDbit set. For a file that does not have the group execution bit (S_IXGRP) set, the set-group-ID bit indicates mandatory file/record locking (see alsoS_ENFMT).
- stat.S_ISVTXΒΆ
Sticky bit. When this bit is set on a directory it means that a file in that directory can be renamed or deleted only by the owner of the file, by the owner of the directory, or by a privileged process.
- stat.S_IRWXUΒΆ
Mask for file owner permissions.
- stat.S_IRUSRΒΆ
Owner has read permission.
- stat.S_IWUSRΒΆ
Owner has write permission.
- stat.S_IXUSRΒΆ
Owner has execute permission.
- stat.S_IRWXGΒΆ
Mask for group permissions.
- stat.S_IRGRPΒΆ
Group has read permission.
- stat.S_IWGRPΒΆ
Group has write permission.
- stat.S_IXGRPΒΆ
Group has execute permission.
- stat.S_IRWXOΒΆ
Mask for permissions for others (not in group).
- stat.S_IROTHΒΆ
Others have read permission.
- stat.S_IWOTHΒΆ
Others have write permission.
- stat.S_IXOTHΒΆ
Others have execute permission.
- stat.S_ENFMTΒΆ
System V file locking enforcement. This flag is shared with
S_ISGID: file/record locking is enforced on files that do not have the group execution bit (S_IXGRP) set.
The following flags can be used in the flags argument of os.chflags():
- stat.UF_SETTABLEΒΆ
All user settable flags.
Added in version 3.13.
- stat.UF_NODUMPΒΆ
Do not dump the file.
- stat.UF_IMMUTABLEΒΆ
The file may not be changed.
- stat.UF_APPENDΒΆ
The file may only be appended to.
- stat.UF_OPAQUEΒΆ
The directory is opaque when viewed through a union stack.
- stat.UF_NOUNLINKΒΆ
The file may not be renamed or deleted.
- stat.UF_COMPRESSEDΒΆ
The file is stored compressed (macOS 10.6+).
- stat.UF_TRACKEDΒΆ
Used for handling document IDs (macOS)
Added in version 3.13.
- stat.UF_DATAVAULTΒΆ
The file needs an entitlement for reading or writing (macOS 10.13+)
Added in version 3.13.
- stat.UF_HIDDENΒΆ
The file should not be displayed in a GUI (macOS 10.5+).
- stat.SF_SETTABLEΒΆ
All super-user changeable flags
Added in version 3.13.
- stat.SF_SUPPORTEDΒΆ
All super-user supported flags
Availability: macOS
Added in version 3.13.
- stat.SF_SYNTHETICΒΆ
All super-user read-only synthetic flags
Availability: macOS
Added in version 3.13.
- stat.SF_ARCHIVEDΒΆ
The file may be archived.
- stat.SF_IMMUTABLEΒΆ
The file may not be changed.
- stat.SF_APPENDΒΆ
The file may only be appended to.
- stat.SF_RESTRICTEDΒΆ
The file needs an entitlement to write to (macOS 10.13+)
Added in version 3.13.
- stat.SF_NOUNLINKΒΆ
The file may not be renamed or deleted.
- stat.SF_SNAPSHOTΒΆ
The file is a snapshot file.
- stat.SF_FIRMLINKΒΆ
The file is a firmlink (macOS 10.15+)
Added in version 3.13.
- stat.SF_DATALESSΒΆ
The file is a dataless object (macOS 10.15+)
Added in version 3.13.
See the *BSD or macOS systems man page chflags(2) for more information.
On Windows, the following file attribute constants are available for use when
testing bits in the st_file_attributes member returned by os.stat().
See the Windows API documentation
for more detail on the meaning of these constants.
- stat.FILE_ATTRIBUTE_ARCHIVEΒΆ
- stat.FILE_ATTRIBUTE_COMPRESSEDΒΆ
- stat.FILE_ATTRIBUTE_DEVICEΒΆ
- stat.FILE_ATTRIBUTE_DIRECTORYΒΆ
- stat.FILE_ATTRIBUTE_ENCRYPTEDΒΆ
- stat.FILE_ATTRIBUTE_HIDDENΒΆ
- stat.FILE_ATTRIBUTE_INTEGRITY_STREAMΒΆ
- stat.FILE_ATTRIBUTE_NORMALΒΆ
- stat.FILE_ATTRIBUTE_NOT_CONTENT_INDEXEDΒΆ
- stat.FILE_ATTRIBUTE_NO_SCRUB_DATAΒΆ
- stat.FILE_ATTRIBUTE_OFFLINEΒΆ
- stat.FILE_ATTRIBUTE_READONLYΒΆ
- stat.FILE_ATTRIBUTE_REPARSE_POINTΒΆ
- stat.FILE_ATTRIBUTE_SPARSE_FILEΒΆ
- stat.FILE_ATTRIBUTE_SYSTEMΒΆ
- stat.FILE_ATTRIBUTE_TEMPORARYΒΆ
- stat.FILE_ATTRIBUTE_VIRTUALΒΆ
Added in version 3.5.
On Windows, the following constants are available for comparing against the
st_reparse_tag member returned by os.lstat(). These are well-known
constants, but are not an exhaustive list.