Question Comment créer un GUID / UUID en Python


Comment créer un GUID en Python indépendant de la plate-forme? J'entends qu'il existe une méthode utilisant ActivePython sous Windows mais c'est uniquement Windows car elle utilise COM. Existe-t-il une méthode utilisant Python ordinaire?


422
2018-02-10 23:51


origine


Réponses:


Le module uuid, en Python 2.5 et versions ultérieures, fournit un UUID compatible RFC   génération. Voir les documents du module et la RFC pour plus de détails.

Docs:

Exemple (travaillant sur 2 et 3):

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

http://code.activestate.com/lists/python-list/72693/


417
2018-02-10 23:54



Si vous utilisez Python 2.5 ou version ultérieure, le module uuid est déjà inclus avec la distribution standard Python.

Ex:

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

301
2018-02-10 23:55



Copié de: https://docs.python.org/2/library/uuid.html (Puisque les liens publiés n'étaient pas actifs et qu'ils continuent à être mis à jour)

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

86
2017-12-04 19:34



J'utilise les GUID en tant que clés aléatoires pour les opérations de type base de données.

La forme hexadécimale, avec les tirets et les caractères supplémentaires, me semble inutilement longue. Mais j'aime aussi que les chaînes représentant des nombres hexadécimaux soient très sûres dans la mesure où elles ne contiennent pas de caractères pouvant causer des problèmes dans certaines situations telles que '+', '=', etc.

Au lieu d'hexadécimal, j'utilise une chaîne base64 sécurisée par URL. Ce qui suit n'est pas conforme à une spécification UUID / GUID (autre que d'avoir la quantité requise de caractère aléatoire).

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('=', '')

26
2018-06-11 16:47



Cette fonction est entièrement configurable et génère un identifiant unique basé sur le format spécifié

Par exemple: - [8, 4, 4, 4, 12], c'est le format mentionné et il va générer l'uuid suivant

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

2
2018-02-24 17:11