Сообщить об ошибке.

Объект stat_result в Python, результаты выполнения os.stat()

Получение результатов вызова os.stat()

Синтаксис:

import os

stat_result = os.stat(...)

Описание:

Объект stat_result модуля os имеет атрибуты, которые примерно соответствуют членам структуры системного вызова stat. Объект os.stat_result является результатом выполнения таких функций, как os.stat(), os.fstat() и os.lstat().

Стандартный модуль stat определяет функции и константы, которые полезны для извлечения информации из структуры системного вызова stat. В Windows некоторые элементы заполнены фиктивными значениями.

Для обеспечения обратной совместимости экземпляр stat_result также доступен в виде кортежа из 10 целых чисел, дающих наиболее важные (и переносимые) элементы структуры stat в порядке stat_result.st_mode, stat_result.st_ino, stat_result.st_dev, stat_result.st_nlink, stat_result.st_uid, stat_result.st_gid, stat_result.st_size, stat_result.st_atime, stat_result.st_mtime, stat_result.st_ctime. В некоторых реализациях в конце могут быть добавлены дополнительные элементы. Для совместимости со старыми версиями Python доступ к stat_result в виде кортежа всегда возвращает целые числа.

Атрибуты объекта os.stat_result

stat_result.st_mode:

Режим файла: биты типа файла и разрешения файла.

stat_result.st_ino:

Зависит от платформы, но если не ноль, однозначно идентифицирует файл для данного значения stat_result.st_dev.

Как правило:

  • номер inode в Unix,
  • индекс файла в Windows

stat_result.st_dev:

Идентификатор устройства, на котором находится этот файл.

stat_result.st_nlink:

Количество жестких ссылок.

stat_result.st_uid:

Идентификатор пользователя владельца файла.

stat_result.st_gid:

Групповой идентификатор владельца файла.

stat_result.st_size:

Размер файла в байтах, если это обычный файл или символическая ссылка. Размер символической ссылки - это длина имени пути, которое он содержит, без завершающего нулевого байта.

Отметки времени timestamp

stat_result.st_atime:

Время последнего доступа, выраженное в секундах.

stat_result.st_mtime:

Время последней модификации контента, выраженное в секундах.

stat_result.st_ctime:

Зависимость от платформы:

  • время последнего изменения метаданных в Unix,
  • время создания в Windows, выраженное в секундах.

Изменено в версии Python 3.12: stat_result.st_ctime устарел в Windows. С версии Python 3.12, для определения времени создания файла в OS Windows необходимо использовать stat_result.st_birthtime. В будущем stat_result.st_ctime будет содержать время последнего изменения метаданных, как и для других платформ.

stat_result.st_atime_ns:

Время последнего доступа, выраженное в наносекундах как целое число.

stat_result.st_mtime_ns:

Время последней модификации контента, выраженное в наносекундах как целое число.

stat_result.st_ctime_ns:

Зависимость от платформы:

  • время последнего изменения метаданных в Unix,
  • время создания в Windows, выраженное в наносекундах как целое число.

Изменено в версии Python 3.12: stat_result.st_ctime_ns устарел в OS Windows. С версии Python 3.12, для определения времени создания файла в OS Windows необходимо использовать stat_result.st_birthtime_ns. В будущем stat_result.st_ctime_ns будет содержать время последнего изменения метаданных, как и для других платформ.

stat_result.st_birthtime:

Время создания файла выражается в секундах. Этот атрибут не всегда доступен и может вызвать ошибку AttributeError.

Изменено в версии Python 3.12: атрибут stat_result.st_birthtime теперь доступен в Windows.

stat_result.st_birthtime_ns:

Новое в версии Python 3.12.

Время создания файла выражается в наносекундах целым числом. Этот атрибут не всегда доступен и может вызвать ошибку AttributeError.


Обратите внимание, что точное значение и разрешение атрибутов stat_result.st_atime, stat_result.st_mtime, stat_result.st_ctime и stat_result.st_birthtime зависят от операционной системы и файловой системы. Например в системах Windows, использующих файловые системы FAT или FAT32, разрешение stat_result.st_mtime составляет 2 секунды, а разрешение stat_result.st_atime только 1 день. Дополнительные сведения смотрите в документации по операционной системе.

Аналогично stat_result.st_atime_ns, stat_result.st_mtime_ns, stat_result.st_ctime_ns и stat_result.st_birthtime_ns всегда выражаются в наносекундах, многие системы не обеспечивают наносекундной точности. В системах, которые действительно обеспечивают наносекундную точность, объект float, используемый для хранения stat_result.st_atime, stat_result.st_mtime, stat_result.st_ctime и stat_result.st_birthtime не может сохранить все это и следовательно будет немного неточным. Если необходимы точные временные метки, то всегда нужно использовать stat_result.st_atime_ns, stat_result.st_mtime_ns, stat_result.st_ctime_ns и stat_result.st_birthtime_ns.

Атрибуты, доступные в некоторых системах Unix:

stat_result.st_blocks:

Количество 512-байтовых блоков, выделенных для файла. Это может быть меньше, чем st_size/512, когда файл имеет ошибки.

stat_result.st_blksize:

Предпочтительный размер блока для эффективного ввода/вывода файловой системы. Запись в файл небольшими порциями может привести к неэффективному чтению/изменению/перезаписи.

stat_result.st_rdev:

Тип устройства, если устройство inode.

stat_result.st_flags:

Пользовательские флаги для файла.

В FreeBSD, доступны атрибуты пользователю root:

stat_result.st_gen:

Номер генерации файла.

В Solaris и производных от него доступны атрибуты:

stat_result.st_fstype:

Строка, которая однозначно определяет тип файловой системы, в которой находится файл.

_В системах Mac OS доступны атрибуты:

stat_result.st_rsize:

Реальный размер файла.

stat_result.st_creator:

Создатель файла.

stat_result.st_type:

Тип файла.

В системах Windows доступны атрибуты:

stat_result.st_file_attributes:

Атрибуты файла Windows: dwFileAttributes член структуры BY_HANDLE_FILE_INFORMATION, возвращаемой функцией GetFileInformationByHandle(). Смотрите константы FILE_ATTRIBUTE_* в модуле статистики.

stat_result.st_reparse_tag:

Когда st_file_attributes имеет установленный FILE_ATTRIBUTE_REPARSE_POINT, это поле содержит тег, идентифицирующий тип точки повторной обработки. Смотрите константы IO_REPARSE_TAG_* в модуле статистики.


Изменено в версии Python 3.8: В Windows член stat_result.st_mode теперь идентифицирует специальные файлы как stat.S_IFCHR, stat.S_IFIFO или stat.S_IFBLK в зависимости от ситуации.

Изменено в версии Python 3.12: В Windows stat_result.st_ctime устарел. В конечном итоге он будет содержать время последнего изменения метаданных для согласованности с другими платформами, но на данный момент все еще содержит время создания. Для определения времени создания теперь нужно использовать stat_result.st_birthtime.

Изменено в версии Python 3.12: В Windows stat_result.st_ino теперь может иметь длину до 128 бит, в зависимости от файловой системы. Раньше его длина не превышала 64 бит, а более крупные идентификаторы файлов упаковывались произвольно.

Изменено в версии Python 3.12: В Windows stat_result.st_rdev больше не возвращает значение. Раньше он содержал то же самое, что и stat_result.st_dev, что было неправильно.

Новое в версии Python 3.12: в Windows добавлен элемент stat_result.st_birthtime.

Примеры получения результатов из объекта stat_result.

# файл test.py
import os
import time

filename = 'test.py'
stat_result = os.stat(filename)

print(f'os.stat({filename}):')
print('  Size:', stat_result.st_size)
print('  Permissions:', oct(stat_result.st_mode))
print('  Owner:', stat_result.st_uid)
print('  Device:', stat_result.st_dev)
print('  Created      :', time.ctime(stat_result.st_ctime))
print('  Last modified:', time.ctime(stat_result.st_mtime))
print('  Last accessed:', time.ctime(stat_result.st_atime))

# ВЫВОД в OS Linux
# os.stat(test.py):
#   Size: 452
#   Permissions: 0o100664
#   Owner: 1000
#   Device: 66305
#   Created      : Fri Oct  6 12:02:30 2023
#   Last modified: Fri Oct  6 12:02:30 2023
#   Last accessed: Fri Oct  6 12:02:30 2023