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

uuid – объекты UUID согласно RFC 4122uuid – UUID objects according to RFC 4122

Исходный код: Lib/uuid.py


This module provides immutable UUID objects (the UUID class) and the functions uuid1(), uuid3(), uuid4(), uuid5() for generating version 1, 3, 4, and 5 UUIDs as specified in RFC 4122.

Если вам нужен просто уникальный идентификатор, скорее всего, стоит вызвать uuid1() или uuid4(). Обратите внимание, что uuid1() может нарушить конфиденциальность, так как создаёт UUID, содержащий сетевой адрес компьютера. uuid4() создаёт случайный UUID.

В зависимости от поддержки базовой платформы, uuid1() может возвращать или не возвращать «безопасный» UUID. Безопасный UUID – это UUID, сгенерированный с использованием методов синхронизации, которые гарантируют, что никакие два процесса не смогут получить одинаковый UUID. Все экземпляры UUID имеют атрибут is_safe, который передаёт любую информацию о безопасности UUID, используя это перечисление:

class uuid.SafeUUID

Добавлено в версии 3.7.

safe

UUID был сгенерирован платформой способом, безопасным для многопроцессорной работы.

unsafe

UUID не был сгенерирован способом, безопасным для многопроцессорной работы.

unknown

Платформа не предоставляет информацию о том, был ли UUID сгенерирован безопасно или нет.

class uuid.UUID(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)

Создаёт UUID из строки из 32 шестнадцатеричных цифр, строки из 16 байт в порядке от старшего к младшему как аргумент bytes, строки из 16 байт в порядке от младшего к старшему как аргумент bytes_le, кортежа из шести целых чисел (32-битное time_low, 16-битное time_mid, 16-битное time_hi_version, 8-битное clock_seq_hi_variant, 8-битное clock_seq_low, 48-битное node) как аргумент fields, или одного 128-битного целого числа как аргумент int. Если задана строка шестнадцатеричных цифр, фигурные скобки, дефисы и префикс URN являются необязательными. Например, все эти выражения возвращают один и тот же UUID:

UUID('{12345678-1234-5678-1234-567812345678}')
UUID('12345678123456781234567812345678')
UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
UUID(bytes=b'\x12\x34\x56\x78'*4)
UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' +
              b'\x12\x34\x56\x78\x12\x34\x56\x78')
UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
UUID(int=0x12345678123456781234567812345678)

Должен быть указан ровно один из параметров: hex, bytes, bytes_le, fields или int. Аргумент version необязателен; если он указан, результирующий UUID получит свои variant и version number, установленные согласно RFC 4122, переопределяя биты в указанных hex, bytes, bytes_le, fields или int.

Сравнение объектов UUID осуществляется путём сравнения их атрибутов UUID.int. Сравнение с объектом, не являющимся UUID, вызывает исключение TypeError.

str(uuid) возвращает строку в формате 12345678-1234-5678-1234-567812345678, где 32 шестнадцатеричные цифры представляют UUID.

Экземпляры UUID имеют следующие атрибуты только для чтения:

UUID.bytes

UUID в виде 16-байтовой строки (содержащей шесть целочисленных полей в порядке байтов от старшего к младшему).

UUID.bytes_le

UUID в виде 16-байтовой строки (с time_low, time_mid и time_hi_version в порядке байтов от младшего к старшему).

UUID.fields

Кортеж из шести целочисленных полей UUID, которые также доступны в виде шести отдельных атрибутов и двух производных атрибутов:

Поле

Значение

time_low

первые 32 бита UUID

time_mid

следующие 16 бит UUID

time_hi_version

следующие 16 бит UUID

clock_seq_hi_variant

следующие 8 бит UUID

clock_seq_low

следующие 8 бит UUID

node

последние 48 бит UUID

time

60-битная метка времени

clock_seq

14-битный номер последовательности

UUID.hex

UUID в виде 32-символьной шестнадцатеричной строки в нижнем регистре.

UUID.int

UUID в виде 128-битного целого числа.

UUID.urn

UUID в виде URN, как указано в RFC 4122.

UUID.variant

Вариант UUID, определяющий внутреннюю структуру UUID. Это будет одна из констант RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT или RESERVED_FUTURE.

UUID.version

Номер версии UUID (от 1 до 5, имеет смысл только когда variant равен RFC_4122).

UUID.is_safe

Перечисление SafeUUID, указывающее, сгенерировала ли платформа UUID безопасным для многопроцессной работы способом.

Добавлено в версии 3.7.

Модуль uuid определяет следующие функции:

uuid.getnode()

Получает аппаратный адрес в виде 48-битного положительного целого числа. При первом запуске он может запустить отдельную программу, что может быть довольно медленно. Если все попытки получить аппаратный адрес не удались, выбирается случайное 48-битное число с установленным битом многоадресной передачи (наименее значимый бит первого октета) в 1, как рекомендовано в RFC 4122. «Аппаратный адрес» означает MAC-адрес сетевого интерфейса. На машине с несколькими сетевыми интерфейсами универсально управляемые MAC-адреса (т.е. где второй наименее значимый бит первого октета сброшен) будут предпочтительнее локально управляемых MAC-адресов, но без других гарантий порядка.

Изменено в версии 3.7: Универсально управляемые MAC-адреса предпочтительнее локально управляемых MAC-адресов, поскольку первые гарантированно\нглобально уникальны, а вторые – нет.

uuid.uuid1(node=None, clock_seq=None)

Генерирует UUID на основе идентификатора хоста, порядкового номера и текущего времени. Если node не указан, для получения аппаратного адреса используется getnode(). Если указан clock_seq, он используется как порядковый номер; в противном случае выбирается случайный 14-битный порядковый номер.

uuid.uuid3(namespace, name)

Генерирует UUID на основе MD5-хеша идентификатора пространства имён (который является UUID) и имени (которое является строкой).

uuid.uuid4()

Генерирует случайный UUID.

uuid.uuid5(namespace, name)

Генерирует UUID на основе SHA-1-хеша идентификатора пространства имён (который является UUID) и имени (которое является строкой).

Модуль uuid определяет следующие идентификаторы пространств имён для использования с uuid3() или uuid5().

uuid.NAMESPACE_DNS

Когда указано это пространство имён, строка name является полным доменным именем.

uuid.NAMESPACE_URL

Если указано это пространство имён, строка name является URL.

uuid.NAMESPACE_OID

Если указано это пространство имён, строка name является ISO OID.

uuid.NAMESPACE_X500

Если указано это пространство имён, строка name является X.500 DN в формате DER или текстовом формате вывода.

Модуль uuid определяет следующие константы для возможных значений атрибута variant:

uuid.RESERVED_NCS

Зарезервировано для совместимости с NCS.

uuid.RFC_4122

Определяет структуру UUID, описанную в RFC 4122.

uuid.RESERVED_MICROSOFT

Зарезервировано для совместимости с Microsoft.

uuid.RESERVED_FUTURE

Зарезервировано для будущего определения.

См. также

RFC 4122 – пространство имён URN для универсального уникального идентификатора (UUID)

Данная спецификация определяет пространство имён универсальных имён ресурсов (URN) для UUID, их внутренний формат, а также методы генерации UUID.

ПримерExample

Вот несколько примеров типичного использования модуля uuid:

>>> import uuid

>>> # создать UUID на основе идентификатора хоста и текущего времени
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # создать UUID с использованием MD5-хеша UUID пространства имён и имени
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # создать случайный UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # создать UUID с использованием SHA-1-хеша UUID пространства имён и имени
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # создать UUID из строки шестнадцатеричных цифр (фигурные скобки и дефисы игнорируются)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # преобразовать UUID в строку шестнадцатеричных цифр стандартного вида
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # получить сырые 16 байт UUID
>>> x.bytes
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # создать UUID из 16-байтовой строки
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')