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 ?
Réponses
Trop de publicités?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.
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
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
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.
- Réponses précédentes
- Plus de réponses
4 votes
docs.activestate.com/activepython/2.6/python/library/uuid.html
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())'
2 votes
I think GUID makes more sense than UUID, as <i>global</i> means global within some namespace, while <i>universal</i> seems to claim true universal uniqueness. Quoi qu'il en soit, nous savons tous de quoi nous parlons ici.