Wie erstelle ich in Python eine GUID, die plattformunabhängig ist? Ich habe gehört, dass es eine Methode gibt, die ActivePython unter Windows verwendet, aber es ist nur Windows, weil es COM verwendet. Gibt es eine Methode mit einfachem Python?
python
uuid
guid
uniqueidentifier
Jonathon Watney
quelle
quelle
python -c 'import uuid; print(uuid.uuid4())'
Antworten:
Docs:
Beispiel (Arbeiten an 2 und 3):
quelle
shortuuid
Modul an, das ich geschrieben habe, da es Ihnen ermöglicht, kürzere, lesbare UUIDs zu generieren: github.com/stochastic-technologies/shortuuiduuid4().hex
undstr(uuid4())
?str(uuid4())
gibt eine String - Darstellung des UUID mit der Striche enthalten, währenduuid4().hex
kehrt „Die UUID als 32-Zeichen Hexadezimalstring“Wenn Sie Python 2.5 oder höher verwenden, ist das uuid-Modul bereits in der Python-Standarddistribution enthalten.
Ex:
quelle
Kopiert von: https://docs.python.org/2/library/uuid.html (Da die veröffentlichten Links nicht aktiv waren und ständig aktualisiert werden)
quelle
Ich verwende GUIDs als zufällige Schlüssel für Operationen vom Datenbanktyp.
Die hexadezimale Form mit den Strichen und zusätzlichen Zeichen erscheint mir unnötig lang. Aber ich mag auch, dass Zeichenfolgen, die Hexadezimalzahlen darstellen, sehr sicher sind, da sie keine Zeichen enthalten, die in bestimmten Situationen Probleme verursachen können, wie z. B. '+', '=' usw.
Anstelle von hexadezimal verwende ich eine url-sichere base64-Zeichenfolge. Das Folgende entspricht jedoch keiner UUID / GUID-Spezifikation (außer der erforderlichen Zufälligkeit).
quelle
random.getrandbits(128).to_bytes(16, 'little')
oder (für Krypto-Zufälligkeit) verwendenos.urandom(16)
und volle 128 Bit Zufall erhalten (UUIDv4 verwendet 6-7 Bit für Versionsinformationen). Oder verwenden Sie nur 15 Bytes (Verlust von 1-2 zufälligen Bits im Vergleich zu UUIDv4) und vermeiden Sie die Notwendigkeit,=
Zeichen abzuschneiden , während Sie gleichzeitig die codierte Größe auf 20 Bytes (von 24 auf 22) reduzieren, da ein Vielfaches von 3 Bytes codiert auf#bytes / 3 * 4
base64 Zeichen ohne Auffüllen erforderlich.return
Anweisung, die ein byteähnliches Objekt erwartet. Es kann mit behoben werdenreturn str(r_uuid).replace('=','')
.Wenn Sie die UUID für einen Primärschlüssel für Ihr Modell oder ein eindeutiges Feld übergeben müssen, gibt der folgende Code das UUID-Objekt zurück -
Wenn Sie UUID als Parameter für die URL übergeben müssen, können Sie wie folgt vorgehen:
Wenn Sie den Hex-Wert für eine UUID möchten, können Sie den folgenden Wert ausführen:
quelle
Diese Funktion ist vollständig konfigurierbar und generiert eine eindeutige UID basierend auf dem angegebenen Format
Beispiel: - [8, 4, 4, 4, 12], dies ist das erwähnte Format und es wird die folgende UUID generiert
quelle
2019 Antwort (für Windows):
Wenn Sie eine permanente UUID wünschen, die einen Computer unter Windows eindeutig identifiziert, können Sie diesen Trick verwenden: (Aus meiner Antwort unter https://stackoverflow.com/a/58416992/8874388 kopiert ).
Verwendet die Windows-API, um die permanente UUID des Computers abzurufen, verarbeitet dann die Zeichenfolge, um sicherzustellen, dass es sich um eine gültige UUID handelt, und gibt zuletzt ein Python-Objekt ( https://docs.python.org/3/library/uuid.html ) zurück, mit dem Sie bequem arbeiten können Möglichkeiten zur Verwendung der Daten (z. B. 128-Bit-Ganzzahl, Hex-Zeichenfolge usw.).
Viel Glück!
PS: Der Unterprozessaufruf könnte wahrscheinlich durch ctypes ersetzt werden, die direkt Windows-Kernel / DLLs aufrufen. Aber für meine Zwecke ist diese Funktion alles, was ich brauche. Es führt eine starke Validierung durch und liefert korrekte Ergebnisse.
quelle
Überprüfen Sie diesen Beitrag, hat mir sehr geholfen. Kurz gesagt, die beste Option für mich war:
Weil ich nur 4-6 zufällige Zeichen anstelle der sperrigen GUID brauchte.
quelle