Как мне создать GUID в Python, который не зависит от платформы? Я слышал, что есть метод, использующий ActivePython в Windows, но это Windows только потому, что он использует COM. Есть ли метод с использованием простого Python?
python
uuid
guid
uniqueidentifier
Джонатон Уотни
источник
источник
python -c 'import uuid; print(uuid.uuid4())'
Ответы:
Docs:
Пример (работает на 2 и 3):
источник
shortuuid
модуль, который я написал, так как он позволяет генерировать более короткие читаемые UUID: github.com/stochastic-technologies/shortuuiduuid4().hex
аstr(uuid4())
?str(uuid4())
возвращает строковое представление UUID с включенными тире, аuuid4().hex
возвращает «UUID в виде шестнадцатеричной строки из 32 символов»Если вы используете Python 2.5 или более позднюю версию, модуль uuid уже включен в стандартный дистрибутив Python.
Пример:
источник
Скопировано из: https://docs.python.org/2/library/uuid.html (поскольку опубликованные ссылки не были активными, и они продолжают обновляться)
источник
Я использую GUID в качестве случайных ключей для операций типа базы данных.
Шестнадцатеричная форма с черточками и дополнительными символами кажется мне неоправданно длинной. Но мне также нравится, что строки, представляющие шестнадцатеричные числа, очень безопасны, поскольку они не содержат символов, которые могут вызвать проблемы в некоторых ситуациях, таких как «+», «=» и т. Д.
Вместо шестнадцатеричного я использую безопасную для URL строку base64. Следующее не соответствует какой-либо спецификации UUID / GUID, хотя (кроме наличия необходимого количества случайности).
источник
random.getrandbits(128).to_bytes(16, 'little')
или (для криптослучайности)os.urandom(16)
и получить полные 128 бит случайных (UUIDv4 использует 6-7 бит в информации о версии). Или используйте только 15 байтов (теряя 1-2 бита случайным образом по сравнению с UUIDv4) и избегайте необходимости обрезать=
знаки, одновременно уменьшая кодированный размер до 20 байтов (с 24, обрезая до 22), так как любое кратное 3 байта кодирует до#bytes / 3 * 4
base64 символов без заполнения.return
оператора, ожидающего байтовоподобный объект. Это можно исправить с помощьюreturn str(r_uuid).replace('=','')
.Если вам нужно передать UUID для первичного ключа для вашей модели или уникального поля, то приведенный ниже код возвращает объект UUID -
Если вам нужно передать UUID в качестве параметра для URL, вы можете сделать, как показано ниже:
Если вы хотите шестнадцатеричное значение для UUID, вы можете сделать следующее:
источник
Эта функция полностью настраивается и генерирует уникальный идентификатор пользователя на основе указанного формата
например: - [8, 4, 4, 4, 12], этот формат упоминается, и он сгенерирует следующий uuid
источник
2019 Ответ (для Windows):
Если вам нужен постоянный UUID, который уникально идентифицирует машину в Windows, вы можете воспользоваться этим трюком: (Скопировано из моего ответа на https://stackoverflow.com/a/58416992/8874388 ).
Использует Windows API для получения постоянного UUID компьютера, затем обрабатывает строку, чтобы убедиться, что это действительный UUID, и, наконец, возвращает объект Python ( https://docs.python.org/3/library/uuid.html ), который дает вам удобный способы использования данных (например, 128-разрядное целое число, шестнадцатеричная строка и т. д.).
Удачи!
PS: вызов подпроцесса, вероятно, можно заменить на ctypes, непосредственно вызывающие ядро / DLL Windows. Но для моих целей эта функция - все, что мне нужно. Это делает сильную проверку и дает правильные результаты.
источник
Проверьте этот пост, мне очень помог. Короче, лучшим вариантом для меня было:
Потому что мне нужно было всего 4-6 случайных символов вместо громоздкого GUID.
источник