все Python 3statфункция
stat.S_IFMT()
биты режима
Вырезает из st_mode биты типа файла; результат сравнивают с константами S_IFREG, S_IFDIR и другими.
Синтаксис
stat.S_IFMT(mode) == stat.S_IFREG
Нужна, когда тип выбирают по словарю или в match: `kinds[stat.S_IFMT(mode)]`. Проверка `mode & stat.S_IFDIR` ошибочна: коды типов — не отдельные флаги, S_IFSOCK = 0o140000 и S_IFBLK = 0o060000 содержат бит каталога, и сокет «окажется» каталогом. Сравнивайте S_IFMT(mode) == константа или берите S_IS*.
Примеры
import os, stat
os.mkdir('d')
open('f', 'w').close()
kinds = {stat.S_IFDIR: 'каталог', stat.S_IFREG: 'файл'}
for name in ('d', 'f'):
print(name, kinds[stat.S_IFMT(os.stat(name).st_mode)]) # → d каталог / f файл
import stat
sock = stat.S_IFSOCK | 0o755
print(bool(sock & stat.S_IFDIR), stat.S_ISDIR(sock)) # → True False — маска врёт, функция нет
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности