884 votes

Comment créer un GUID/UUID en Python ?

Comment créer un GUID en Python qui soit indépendant de la plate-forme ? J'ai entendu dire qu'il existait une méthode utilisant ActivePython sous Windows, mais elle est réservée à Windows car elle utilise COM. Existe-t-il une méthode utilisant Python pur ?

57 votes

Pour l'amour de tout ce qui est sacré, c'est un UUID - Universal Unique ID. fr.wikipedia.org/wiki/Universally_unique_identifier - C'est juste que malheureusement MS a préféré le GUID.

9 votes

Voici une réplique pour vous : python -c 'import uuid; print(uuid.uuid4())'

0voto

Mitch McMabers Points 1446

Réponse 2019 (pour Windows) :

Si vous voulez un UUID permanent qui identifie une machine de manière unique sous Windows, vous pouvez utiliser cette astuce : (Copié de ma réponse à l'adresse suivante https://stackoverflow.com/a/58416992/8874388 ).

from typing import Optional
import re
import subprocess
import uuid

def get_windows_uuid() -> Optional[uuid.UUID]:
    try:
        # Ask Windows for the device's permanent UUID. Throws if command missing/fails.
        txt = subprocess.check_output("wmic csproduct get uuid").decode()

        # Attempt to extract the UUID from the command's result.
        match = re.search(r"\bUUID\b[\s\r\n]+([^\s\r\n]+)", txt)
        if match is not None:
            txt = match.group(1)
            if txt is not None:
                # Remove the surrounding whitespace (newlines, space, etc)
                # and useless dashes etc, by only keeping hex (0-9 A-F) chars.
                txt = re.sub(r"[^0-9A-Fa-f]+", "", txt)

                # Ensure we have exactly 32 characters (16 bytes).
                if len(txt) == 32:
                    return uuid.UUID(txt)
    except:
        pass # Silence subprocess exception.

    return None

print(get_windows_uuid())

Utilise l'API Windows pour obtenir l'UUID permanent de l'ordinateur, puis traite la chaîne pour s'assurer qu'il s'agit d'un UUID valide, et enfin renvoie un objet Python ( https://docs.python.org/3/library/uuid.html ) qui vous donne des moyens pratiques d'utiliser les données (comme un entier de 128 bits, une chaîne hexagonale, etc.).

Bonne chance !

PS : L'appel au sous-processus pourrait probablement être remplacé par des ctypes appelant directement les noyaux/DLL de Windows. Mais pour mes besoins, cette fonction est tout ce dont j'ai besoin. Elle effectue une validation solide et produit des résultats corrects.

0voto

Aditya singh Points 1

Pour créer un identifiant unique, vous devez utiliser le paquet UUID : En savoir plus sur UUID : Visitez : https://www.copilotcode.com/2021/12/get-unique-id-string-or-numberuuid-in.html

-1voto

Ulrik Larsen Points 15

Je ne suis pas sûr que cette réponse corresponde à vos attentes, mais je reçois des identifiants uniques comme celui-ci :

import time

def unique_timestamp():
    time.sleep(0.001)
    return round(time.time() * 1000)

-3voto

Manoj Selvin Points 507

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

ex : - [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

-9voto

QtRoS Points 626

Consulte este post, m'a beaucoup aidé. En bref, la meilleure option pour moi était :

import random 
import string 

# defining function for random 
# string id with parameter 
def ran_gen(size, chars=string.ascii_uppercase + string.digits): 
    return ''.join(random.choice(chars) for x in range(size)) 

# function call for random string 
# generation with size 8 and string  
print (ran_gen(8, "AEIOSUMA23")) 

Parce que j'avais besoin de 4-6 caractères aléatoires au lieu d'un GUID volumineux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X