Pregunta

¿Cómo se crea un GUID en Python que es independiente de la plataforma? He oído que es un método que utiliza ActivePython en Windows, pero es sólo para Windows, ya que utiliza COM. ¿Hay un método que utiliza Python normal?

¿Fue útil?

Solución

  

El módulo uuid, en Python 2.5 y arriba, proporciona UUID compatible RFC   Generacion. Consulte la documentación 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'

Otros consejos

Si estás usando Python 2.5 o posterior, la módulo uuid ya está incluido con la distribución estándar de Python.

Ejemplo:

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

Copiado de: https://docs.python.org/2/library/uuid.html (Desde los enlaces publicados no estaban activos y mantienen actualización)

>>> 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')

Yo uso GUID como claves aleatorias para operaciones del tipo de base de datos.

El formato hexadecimal, con los guiones y caracteres adicionales parece innecesariamente largo para mí. Pero también me gusta que las cadenas que representan números hexadecimales son muy seguros en cuanto a que no contienen caracteres que pueden causar problemas en algunas situaciones, tales como '+', '=', etc ..

En lugar de hexadecimal, utilizo una cadena base64 url-seguro. La siguiente no se ajusta a cualquier especificación UUID / GUID aunque (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 UID único basado en el formato especificado

por ejemplo: - [8, 4, 4, 4, 12], este es el formato mencionado y generará la 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

Si necesita pasar UUID de una clave principal para su modelo o un campo único, entonces por debajo de código devuelve el objeto UUID -

 import uuid
 uuid.uuid4()

Si necesita pasar UUID como parámetro de URL que puede hacer, como a continuación código -

import uuid
str(uuid.uuid4())

Si desea que el valor hexadecimal para un UUID que puede hacer el siguiente uno -

import uuid    
uuid.uuid4().hex
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top