Cómo crear un GUID / UUID en Python

¿Cómo creo un GUID en Python que es independiente de la plataforma? Escuché que hay un método que usa ActivePython en Windows pero es Windows solo porque usa COM. ¿Hay algún método usando Python plano?

El módulo uuid, en Python 2.5 y superior, proporciona una generación de UUID compatible con RFC. Vea los documentos del módulo y el RFC para más detalles. [ fuente ]

Docs:

Ejemplo (trabajando en 2 y 3):

 >>> import uuid >>> uuid.uuid4() UUID('bd65600d-8669-4903-8a14-af88203add38') >>> str(uuid.uuid4()) 'f50ec0b7-f960-400d-91f0-c42a6d44e3d0' >>> uuid.uuid4().hex '9fe2c4e93f654fdbb24c02b15259716c' 

Si está utilizando Python 2.5 o posterior, el módulo uuid ya está incluido en la distribución estándar de Python.

Ex:

 >>> import uuid >>> uuid.uuid4() UUID('5361a11b-615c-42bf-9bdb-e2c3790ada14') 

Copiado de: https://docs.python.org/2/library/uuid.html (ya que los enlaces publicados no estaban activos y se siguen actualizando)

 >>> import uuid >>> # make a UUID based on the host ID and current time >>> uuid.uuid1() UUID('a8098c1a-f86e-11da-bd1a-00112444be1e') >>> # make a UUID using an MD5 hash of a namespace UUID and a name >>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e') >>> # make a random UUID >>> uuid.uuid4() UUID('16fd2706-8baf-433b-82eb-8c7fada847da') >>> # make a UUID using a SHA-1 hash of a namespace UUID and a name >>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d') >>> # make a UUID from a string of hex digits (braces and hyphens ignored) >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}') >>> # convert a UUID to a string of hex digits in standard form >>> str(x) '00010203-0405-0607-0809-0a0b0c0d0e0f' >>> # get the raw 16 bytes of the UUID >>> x.bytes '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' >>> # make a UUID from a 16-byte string >>> uuid.UUID(bytes=x.bytes) UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') 

Utilizo los GUID como claves aleatorias para las operaciones de tipo de base de datos.

La forma hexadecimal, con los guiones y los caracteres adicionales me parecen innecesariamente largos. Pero también me gusta que las cadenas que representan números hexadecimales son muy seguras, ya que no contienen caracteres que puedan causar problemas en algunas situaciones como ‘+’, ‘=’, etc.

En lugar de hexadecimal, uso una cadena base64 segura para url. Sin embargo, lo siguiente no se ajusta a ninguna especificación UUID / GUID (aparte de tener la cantidad requerida de aleatoriedad).

 import base64 import uuid # get a UUID - URL safe, Base64 def get_a_uuid(): r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes) return r_uuid.replace('=', '') 

Esta función es totalmente configurable y genera un uid único basado en el formato especificado

por ejemplo: – [8, 4, 4, 4, 12], este es el formato mencionado y generará el siguiente uuid

LxoYNyXe-7hbQ-caJt-DSdU-PDAht56cMEWi

  import random as r def generate_uuid(): random_string = '' random_str_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" uuid_format = [8, 4, 4, 4, 12] for n in uuid_format: for i in range(0,n): random_string += str(random_str_seq[r.randint(0, len(random_str_seq) - 1)]) if n != 12: random_string += '-' return random_string