Comment créer un GUID en Python indépendant de la plateforme? J'entends qu'il y a une méthode utilisant ActivePython sur Windows mais c'est Windows uniquement parce qu'il utilise COM. Existe-t-il une méthode utilisant du Python ordinaire?
python
uuid
guid
uniqueidentifier
Jonathon Watney
la source
la source
python -c 'import uuid; print(uuid.uuid4())'
Réponses:
Documents:
Exemple (travail sur 2 et 3):
la source
shortuuid
module que j'ai écrit, car il vous permet de générer des UUID plus courts et lisibles: github.com/stochastic-technologies/shortuuiduuid4().hex
etstr(uuid4())
?str(uuid4())
renvoie une représentation sous forme de chaîne de l'UUID avec les tirets inclus, tandis queuuid4().hex
renvoie "L'UUID sous forme de chaîne hexadécimale à 32 caractères"Si vous utilisez Python 2.5 ou version ultérieure, le module uuid est déjà inclus avec la distribution standard Python.
Ex:
la source
Copié à partir de: https://docs.python.org/2/library/uuid.html (puisque les liens publiés n'étaient pas actifs et qu'ils continuent de se mettre à jour)
la source
J'utilise des GUID comme 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 car elles ne contiennent pas de caractères qui peuvent causer des problèmes dans certaines situations telles que '+', '=', etc.
Au lieu de hexadécimal, j'utilise une chaîne base64 sans danger pour les URL. Cependant, ce qui suit n'est conforme à aucune spécification UUID / GUID (à part le fait d'avoir la quantité d'aléatoire requise).
la source
random.getrandbits(128).to_bytes(16, 'little')
ou (pour l'aléa cryptographique)os.urandom(16)
et obtenir 128 bits aléatoires complets (UUIDv4 utilise 6-7 bits sur les informations de version). Ou utilisez seulement 15 octets (en perdant 1 à 2 bits aléatoires par rapport à UUIDv4) et évitez d'avoir à couper les=
signes tout en réduisant la taille codée à 20 octets (de 24, découpés à 22), car tout multiple de 3 octets code en#bytes / 3 * 4
caractères base64 sans remplissage requis.return
déclaration qui attend un objet de type octets. Il peut être corrigé avecreturn str(r_uuid).replace('=','')
.Si vous devez transmettre l'UUID pour une clé primaire pour votre modèle ou champ unique, le code ci-dessous renvoie l'objet UUID -
Si vous devez passer l'UUID comme paramètre pour l'URL, vous pouvez faire comme ci-dessous le code -
Si vous voulez la valeur hexadécimale d'un UUID, vous pouvez faire celle ci-dessous -
la source
Cette fonction est entièrement configurable et génère un UID unique basé sur le format spécifié
par exemple: - [8, 4, 4, 4, 12], c'est le format mentionné et il générera l'uuid suivant
la source
Réponse 2019 (pour Windows):
Si vous voulez un UUID permanent qui identifie une machine uniquement sous Windows, vous pouvez utiliser cette astuce: (Copié de ma réponse sur https://stackoverflow.com/a/58416992/8874388 ).
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 retourne enfin un objet Python ( https://docs.python.org/3/library/uuid.html ) qui vous offre une commodité façons d'utiliser les données (comme un entier de 128 bits, une chaîne hexadécimale, etc.).
Bonne chance!
PS: L'appel de sous-processus pourrait probablement être remplacé par des ctypes appelant directement le noyau / DLL Windows. Mais pour mes besoins, cette fonction est tout ce dont j'ai besoin. Il effectue une validation solide et produit des résultats corrects.
la source
Consultez ce post, m'a beaucoup aidé. En bref, la meilleure option pour moi était:
Parce que je n'avais besoin que de 4 à 6 caractères aléatoires au lieu d'un GUID volumineux.
la source