Como crio um GUID no Python que é independente da plataforma? Ouvi dizer que existe um método usando o ActivePython no Windows, mas é o Windows apenas porque ele usa COM. Existe um método usando Python simples?
python
uuid
guid
uniqueidentifier
Jonathon Watney
fonte
fonte
python -c 'import uuid; print(uuid.uuid4())'
Respostas:
Documentos:
Exemplo (trabalhando em 2 e 3):
fonte
shortuuid
módulo que escrevi, pois permite gerar UUIDs mais curtos e legíveis: github.com/stochastic-technologies/shortuuiduuid4().hex
estr(uuid4())
?str(uuid4())
retorna uma representação de string do UUID com os traços incluídos, enquantouuid4().hex
retorna "o UUID como uma string hexadecimal de 32 caracteres"Se você estiver usando o Python 2.5 ou posterior, o módulo uuid já está incluído na distribuição padrão do Python.
Ex:
fonte
Copiado de: https://docs.python.org/2/library/uuid.html (Como os links publicados não estavam ativos e continuam atualizando)
fonte
Eu uso GUIDs como chaves aleatórias para operações do tipo banco de dados.
A forma hexadecimal, com traços e caracteres extras, parece desnecessariamente longa para mim. Mas também gosto que cadeias de caracteres que representam números hexadecimais sejam muito seguras, pois não contêm caracteres que podem causar problemas em algumas situações, como '+', '=', etc.
Em vez de hexadecimal, eu uso uma string base64 segura para URL. O seguinte não está de acordo com nenhuma especificação UUID / GUID (exceto a quantidade necessária de aleatoriedade).
fonte
random.getrandbits(128).to_bytes(16, 'little')
ou (para aleatoriedade de criptografia)os.urandom(16)
e obter 128 bits aleatórios completos (o UUIDv4 usa 6-7 bits nas informações da versão). Ou use apenas 15 bytes (perdendo 1-2 bits aleatórios vs. UUIDv4) e evite a necessidade de cortar=
sinais, reduzindo também o tamanho codificado para 20 bytes (de 24, aparado para 22), como qualquer múltiplo de 3 bytes codifica para#bytes / 3 * 4
base64 caracteres sem preenchimento necessário.return
instrução que espera um objeto semelhante a bytes. Pode ser consertado comreturn str(r_uuid).replace('=','')
.Se você precisar passar o UUID para uma chave primária para o seu modelo ou campo exclusivo, o código abaixo retornará o objeto UUID -
Se você precisar passar o UUID como parâmetro para o URL, faça o seguinte abaixo do código -
Se você quiser o valor hexadecimal para um UUID, faça o seguinte:
fonte
Esta função é totalmente configurável e gera um uid exclusivo com base no formato especificado
por exemplo: - [8, 4, 4, 4, 12], este é o formato mencionado e irá gerar o seguinte uuid
fonte
Resposta 2019 (para Windows):
Se você deseja um UUID permanente que identifique uma máquina exclusivamente no Windows, use este truque: (Copiado da minha resposta em https://stackoverflow.com/a/58416992/8874388 ).
Usa a API do Windows para obter o UUID permanente do computador, depois processa a cadeia de caracteres para garantir que seja um UUID válido e, por fim, retorna um objeto Python ( https://docs.python.org/3/library/uuid.html ), que oferece uma conveniência maneiras de usar os dados (como número inteiro de 128 bits, sequência hexadecimal etc.).
Boa sorte!
PS: A chamada de subprocesso provavelmente poderia ser substituída por ctypes chamando diretamente o kernel / DLLs do Windows. Mas, para meus propósitos, essa função é tudo que preciso. Faz validação forte e produz resultados corretos.
fonte
Confira este post, me ajudou muito. Em suma, a melhor opção para mim foi:
Porque eu precisava de apenas 4-6 caracteres aleatórios em vez de GUID volumoso.
fonte