Документация Python неофициальный перевод

stat – интерпретация результатов stat()stat – Interpreting stat() results

Модуль stat определяет константы и функции для интерпретации результатов os.stat(), os.fstat() и os.lstat() (если они существуют). Подробные сведения о вызовах stat, fstat и lstat можно найти в документации вашей системы.

Модуль stat определяет следующие функции для проверки конкретных типов файлов:

stat.S_ISDIR(mode)
Возвращает ненулевое значение, если режим соответствует каталогу.
stat.S_ISCHR(mode)
Возвращает ненулевое значение, если режим соответствует файлу символьного устройства.
stat.S_ISBLK(mode)
Возвращает ненулевое значение, если режим соответствует файлу блочного устройства.
stat.S_ISREG(mode)
Возвращает ненулевое значение, если режим соответствует обычному файлу.
stat.S_ISFIFO(mode)
Возвращает ненулевое значение, если режим соответствует FIFO (именованному каналу).
stat.S_ISLNK(mode)
Возвращает ненулевое значение, если режим соответствует символической ссылке.
stat.S_ISSOCK(mode)
Возвращает ненулевое значение, если режим соответствует сокету.

Определены ещё две функции для более общей работы с режимом файла:

stat.S_IMODE(mode)
Возвращает часть режима файла, которая может быть установлена с помощью os.chmod() – то есть биты разрешений файла, а также биты sticky, set-group-id и set-user-id (в системах, которые их поддерживают).
stat.S_IFMT(mode)
Возвращает часть режима файла, которая описывает тип файла (используется функциями S_IS*() выше).

Обычно для проверки типа файла используются функции os.path.is*(); функции из этого модуля полезны, когда нужно выполнить несколько проверок одного и того же файла и избежать издержек системного вызова stat для каждой проверки. Они также пригодятся при проверке информации о файле, которая не обрабатывается модулем os.path, например, для проверки блочных и символьных устройств.

Все приведённые ниже переменные – это просто символические индексы в 10-кортеже, возвращаемом os.stat(), os.fstat() или os.lstat().

stat.ST_MODE
Режим защиты inode.
stat.ST_INO
Номер inode.
stat.ST_DEV
Устройство, на котором находится inode.
Количество ссылок на inode.
stat.ST_UID
Идентификатор пользователя владельца.
stat.ST_GID
Идентификатор группы владельца.
stat.ST_SIZE
Размер обычного файла в байтах; количество данных, ожидающих чтения на некоторых специальных файлах.
stat.ST_ATIME
Время последнего доступа.
stat.ST_MTIME
Время последнего изменения.
stat.ST_CTIME
«ctime» в том виде, в котором он сообщается операционной системой. В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) – время создания (подробнее см. документацию платформы).

Интерпретация «размера файла» меняется в зависимости от типа файла. Для обычных файлов это размер файла в байтах. Для FIFO (именованных каналов) и сокетов в большинстве вариантов Unix (включая Linux) «размер» – это количество байтов, ожидающих чтения на момент вызова os.stat(), os.fstat() или os.lstat(); это может быть полезно, например, для опроса одного из этих специальных файлов после неблокирующего открытия. Значение поля размера для других символьных и блочных устройств сильно варьируется в зависимости от реализации базового системного вызова.

Пример:

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.stat(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)