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

Функция mkdir() модуля os в Python

Создать каталог и установить режим доступа к нему

Синтаксис:

import os

os.mkdir(path, mode=0o777, *, dir_fd=None)

Параметры:

Возвращаемое значение:

  • None

Описание:

Функция mkdir() модуля os создает каталог с именем path с режимом доступа к нему mode. Аргумент path может принимать объекты, представляющие путь файловой системы, такие как pathlib.PurePath.

Если каталог уже существует, вызывается исключение FileExistsError.

Если установлены биты, отличные от последних 9 (то есть последние 3 цифры восьмеричного представления режима), их значение зависит от платформы.

В некоторых системах режим mode игнорируется и необходимо явно вызвать os.chmod(), чтобы установить режим доступа. Там, где он используется, текущее значение umask сначала маскируется.

Аргумент режима доступа mode может принимать последние 3 цифры восьмеричного представления числа, например 0o755. По умолчанию mode=0o777. Также mode может принимать одно или несколько из следующих значений, значения которых приведены в модуле stat:

Изменено в Python 3.13: Windows теперь поддерживает режим 0o700. Это неявно влияет на tempfile.mkdtemp() и является средством устранения уязвимости CVE-2024-4030. Другие значения mode продолжают игнорироваться.

Возможные значения mode:

  • stat.S_ISUID - Устанавливает бит идентификатора пользователя.
  • stat.S_ISGID - Устанавливает бит идентификатора группы. Этот бит имеет несколько специальных применений.
    • Для каталога это означает, что файлы наследуют идентификатор своей группы из каталога, а не от эффективного идентификатора группы процесса создания, и созданные там каталоги также получат установленный бит S_ISGID.
    • Для файла, который не имеет установленного бита выполнения группы S_IXGRP, бит set-group-ID указывает на обязательную блокировку файла/записей (смотрите также S_ENFMT).
  • stat.S_ISVTX - Липкий бит. Когда этот бит установлен в каталоге, это означает, что файл в этом каталоге может быть переименован или удален только владельцем файла, владельцем каталога или привилегированным процессом.
  • stat.S_IRWXU - Маска устанавливает для пользователя права rwx.
  • stat.S_IRUSR - Владелец имеет разрешение на чтение.
  • stat.S_IWUSR - Владелец имеет разрешение на запись.
  • stat.S_IXUSR - Владелец имеет разрешение на исполнение.,
  • stat.S_IRWXG - Маска устанавливает для группы права rwx.
  • stat.S_IRGRP - Группа имеет разрешение на чтение.
  • stat.S_IWGRP - Группа имеет разрешение на запись.
  • stat.S_IXGRP - Группа имеет разрешение на исполнение.
  • stat.S_IRWXO - Маска устанавливает для других (не в группе) права rwx.
  • stat.S_IROTH - Другие имеет разрешение на чтение.
  • stat.S_IWOTH - Другие имеет разрешение на запись.
  • stat.S_IXOTH - Другие имеет разрешение на исполнение.
  • stat.S_ENFMT - Система V принудительно блокирует файлы. Этот флаг используется совместно с SISGID: блокировка файлов/записей применяется к файлам, для которых не установлен бит выполнения группы (SIXGRP),
  • stat.S_IREAD - Unix V7 синоним для S_IRUSR.
  • stat.S_IWRITE - Unix V7 синоним для S_IWUSR.
  • stat.S_IEXEC - Unix V7 синоним для S_IXUSR.

Приведенные выше значения можно комбинировать побитовым ИЛИ '|', например stat.S_IRWXU|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH. Данная комбинация установит разрешение rwxr-xr-- для path.

Эта функция также может поддерживать пути относительно дескрипторов каталогов dir_fd.

Также возможно создание временных каталогов, смотрите функцию tempfile.mkdtemp() модуля tempfile.

Функция os.mkdir() вызывает событие аудита os.mkdir с аргументами path, mode, dir_fd.

Примеры использования:

>>> import os, stat
>>> d = 'test_dir'
>>> os.mkdir(d, 0o754)
>>> os.path.isdir(d)
# True
>>> st = os.stat(d).st_mode
>>> stat.filemode(st)
# 'drwxrw-r--'

При создании нового каталога с помощью os.mkdir() все родительские каталоги должны уже существовать:

import os

dir_name = 'test_dir'

print('Creating', dir_name)
os.makedirs(dir_name)

file_name = os.path.join(dir_name, 'example.txt')
print('Creating', file_name)
with open(file_name, 'wt') as f:
    f.write('example file')

print('Cleaning up')
os.unlink(file_name)
os.rmdir(dir_name)